Как использовать встроенные пароли для сброса / изменения видов с помощью собственных шаблонов

Например, я могу указать url '^/accounts/password/reset/$' на django.contrib.auth.views.password_reset с моим именем файла шаблона в контексте, но, мне кажется, вам нужно отправить больше деталей контекста.

Мне нужно точно знать, какой контекст нужно добавить для каждого сброса пароля и изменения видов.

7 Solutions collect form web for “Как использовать встроенные пароли для сброса / изменения видов с помощью собственных шаблонов”

Если вы посмотрите на источники для django.contrib.auth.views.password_reset, вы увидите, что он использует RequestContext . В результате вы можете использовать Context Processors для изменения контекста, который может позволить вам вводить необходимую вам информацию.

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): 

Проверьте пароль_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.

Настоятельно рекомендуем эту статью.

Я просто подключил его, и это сработало

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) 

Чтобы увидеть это, просто взгляните на функцию declartion встроенных представлений:

http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L74

Вы можете сделать следующее:

  1. добавьте в свои urlpatterns (r '^ / accounts / password / reset / $', password_reset)
  2. поместите свой шаблон в '/templates/registration/password_reset_form.html'
  3. сделайте свое приложение перед «django.contrib.auth» в INSTALLED_APPS

Объяснение:

Когда шаблоны загружаются, они выполняются в вашей переменной INSTALLED_APPS в settings.py. Порядок продиктован рангом определения в INSTALLED_APPS, так как ваше приложение появилось до «django.contrib.auth», ваш шаблон был загружен (ссылка: https://docs.djangoproject.com/en/dev/ref/templates/api /#django.template.loaders.app_directories.Loader ).

Мотивация подхода:

  1. Я хочу быть более сухим и не повторяться для любого представления (определяемого django) именем шаблона (они уже определены в django)
  2. Мне нужен самый маленький url.py

В документации говорится, что существует только одна переменная контекста, form .

Если у вас возникли проблемы с входом в систему (что является обычным явлением), в документации указывается три контекстные переменные:

  • form : Объект формы, представляющий форму входа. Дополнительную информацию о объектах формы см. В документации по формам.
  • next : URL для перенаправления после успешного входа в систему. Это может содержать строку запроса.
  • site_name : имя текущего сайта, в соответствии с настройкой SITE_ID.

Я использовал эти две строки в 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") 

Другим, возможно, более простым решением является добавление вашего каталога шаблонов переопределения в запись DIRS параметра TEMPLATES в settings.py. (Я думаю, что этот параметр является новым в Django 1.8. Его можно было назвать TEMPLATE_DIRS в предыдущих версиях Django.)

Вот так:

 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

  • Django ajax следовать и отменить
  • Параллельно распределенная задача сельдерея с многопроцессорной обработкой
  • Django- Connection отказался при использовании smtp
  • Разве django с mongodb делает миграцию прошлым?
  • Как показать параметры параметров запроса в Django REST Framework - Swagger
  • Как я могу пропустить миграцию с помощью команды переноса Django?
  • Django-debug-toolbar-line-profiler показывает только одну строку вывода, без содержимого
  • Почему я должен использовать бродягу, если я использую virtualenv?
  • Python - лучший язык программирования в мире.