Например , я могу указать url '^/accounts/password/reset/$'
на django.contrib.auth.views.password_reset
с моим шаблоном файлом в контексте , но я думаю , что нужно послать больше информации контекста.
Мне нужно точно знать, какой контекст добавить для каждого из представлений сброса и изменения пароля.
context
это то, что вы ищете!Ответы:
Если вы посмотрите на исходные коды django.contrib.auth.views.password_reset, вы увидите, что он использует
RequestContext
. В результате вы можете использовать контекстные процессоры для изменения контекста, что может позволить вам вводить необходимую информацию.B-список дает хорошее введение в процессоры контекста .
Изменить (кажется, я был смущен тем, что был на самом деле вопрос):
Вы заметите, что он
password_reset
принимает именованный параметрtemplate_name
:def password_reset(request, is_admin_site=False, template_name='registration/password_reset_form.html', email_template_name='registration/password_reset_email.html', password_reset_form=PasswordResetForm, token_generator=default_token_generator, post_reset_redirect=None):
Проверьте password_reset для получения дополнительной информации.
... таким образом, с urls.py вроде:
from django.conf.urls.defaults import * from django.contrib.auth.views import password_reset urlpatterns = patterns('', (r'^/accounts/password/reset/$', password_reset, {'template_name': 'my_templates/password_reset.html'}), ... )
django.contrib.auth.views.password_reset
будет вызываться для URL-адресов, совпадающих'/accounts/password/reset'
с аргументом ключевого словаtemplate_name = 'my_templates/password_reset.html'
.В противном случае вам не нужно предоставлять какой-либо контекст, поскольку
password_reset
представление само о себе позаботится. Если вы хотите узнать, какой контекст у вас есть, вы можете вызватьTemplateSyntax
ошибку и просмотреть трассировку стека, чтобы найти фрейм с локальной переменной с именемcontext
. Если вы хотите изменить контекст, то, вероятно, вам подойдет то, что я сказал выше о процессорах контекста.Итак: что вам нужно сделать, чтобы использовать собственный шаблон? При вызове представления
template_name
укажите аргумент ключевого слова. Вы можете предоставить аргументы ключевого слова для представлений, включив словарь в качестве третьего члена кортежа шаблона URL.источник
registration/password_reset_email.html
самом деле содержат HTML элементы , такие как:<div>
,<a>
потому что это посылает только текстНастоятельно рекомендую эту статью.
Я просто подключил его, и он заработал
http://garmoncheg.blogspot.com.au/2012/07/django-resetting-passwords-with.html
источник
Вам просто нужно обернуть существующие функции и передать нужный шаблон. Например:
from django.contrib.auth.views import password_reset def my_password_reset(request, template_name='path/to/my/template'): return password_reset(request, template_name)
Чтобы убедиться в этом, просто взгляните на объявление функции встроенных представлений:
http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L74
источник
Вы можете сделать следующее:
Пояснение:
Когда шаблоны загружены, они ищутся в вашей переменной INSTALLED_APPS в settings.py. Порядок определяется рангом определения в INSTALLED_APPS, поэтому, поскольку ваше приложение находится перед 'django.contrib.auth', ваш шаблон был загружен (ссылка: https://docs.djangoproject.com/en/dev/ref/templates/api /#django.template.loaders.app_directories.Loader ).
Мотивация подхода:
источник
Другое, возможно, более простое решение - добавить каталог переопределенных шаблонов в запись DIRS параметра TEMPLATES в settings.py. (Я думаю, что этот параметр является новым в Django 1.8. В предыдущих версиях Django он мог называться TEMPLATE_DIRS.)
Вот так:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', # allow overriding templates from other installed apps 'DIRS': ['my_app/templates'], 'APP_DIRS': True, }]
Затем поместите файлы шаблона переопределения в папку
my_app/templates
. Таким образом, переопределенный шаблон сброса пароля будетmy_app/templates/registration/password_reset_form.html
источник
В документации говорится, что существует только одна контекстная переменная
form
.Если у вас возникли проблемы с входом в систему (что является обычным явлением), в документации указано, что есть три контекстных переменных:
form
: Объект формы, представляющий форму входа в систему. См. Документацию по формам для получения дополнительной информации об объектах формы.next
: URL-адрес для перенаправления после успешного входа в систему. Это также может содержать строку запроса.site_name
: Имя текущего сайта в соответствии с настройкой SITE_ID.источник
password_reset
зрения.Я использовал эти две строки в URL-адресе и шаблоне от администратора, который я менял по своему усмотрению
url(r'^change-password/$', 'django.contrib.auth.views.password_change', { 'template_name': 'password_change_form.html'}, name="password-change"), url(r'^change-password-done/$', 'django.contrib.auth.views.password_change_done', { 'template_name': 'password_change_done.html' }, name="password-change-done")
источник