Python 如何更改默认Django重置密码电子邮件模板引用的视图名称?

Python 如何更改默认Django重置密码电子邮件模板引用的视图名称?,python,django,Python,Django,这是Django 1.7中的默认重置密码电子邮件模板: {% load i18n %}{% autoescape off %} {% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktrans %} {% trans "Please go to the following page

这是Django 1.7中的默认重置密码电子邮件模板:

{% load i18n %}{% autoescape off %}
{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktrans %}

{% trans "Please go to the following page and choose a new password:" %}
{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
{% endblock %}
{% trans "Your username, in case you've forgotten:" %} {{ user.get_username }}

{% trans "Thanks for using our site!" %}

{% blocktrans %}The {{ site_name }} team{% endblocktrans %}

{% endautoescape %}
在我的
urls.py
视图中,
password\u reset\u confirm
使用此备用名称:
password\u reset\u 3of4\u new\u password\u表单

from django.conf.urls import patterns, url
#Passing keyword arguments through url entries:
# - https://docs.djangoproject.com/en/1.7/topics/http/urls/#passing-extra-options-to-view-functions
urlpatterns = patterns('',
    url(r"^login/$", "auth_lifecycle.registration.views.login_maybe_remember",
        name="login"),
    url(r"^logout_then_login/$", "django.contrib.auth.views.logout_then_login",
        {"login_url": "login"}, name="logout_then_login"),
    url(r"^password_reset_1of4_email_request/$",
        "django.contrib.auth.views.password_reset",
        { "template_name": "registration/password_reset_1of4_email_request.html",
          "post_reset_redirect": "password_reset_2of4_email_sent" },
        name="password_reset_1of4_email_request"),
    url(r"^password_reset_2of4_email_sent/$",
        "django.contrib.auth.views.password_reset_done",
        { "template_name": "registration/password_reset_2of4_email_sent.html" },
        name="password_reset_2of4_email_sent"),
    url(r"^pwd_reset_3of4_new_pwd_form/(?P<uidb64>\w+)/(?P<token>[\w-]+)/$",
        "django.contrib.auth.views.password_reset_confirm",
        name="password_reset_3of4_new_password_form"),                         #<--HERE
    url(r"^password_reset_4of4_finished/$",
        "django.contrib.auth.views.password_reset_complete",
        name="password_reset_4of4_finished"),
)
来自django.conf.url导入模式,url
#通过url条目传递关键字参数:
# - https://docs.djangoproject.com/en/1.7/topics/http/urls/#passing-查看函数的附加选项
urlpatterns=模式(“”,
url(r“^login/$”,“auth\u lifecycle.registration.views.login\u maybe\u memory”,
name=“login”),
url(r“^logout\u然后登录/$”,“django.contrib.auth.views.logout\u然后登录”,
{“login\u url”:“login”},name=“logout\u then\u login”),
url(r“^password\u reset\u 1of4\u email\u request/$”,
“django.contrib.auth.views.password\u reset”,
{“模板名称”:“注册/密码重置\u1of4\uemail\urequest.html”,
“post_reset_redirect”:“密码_reset_2of4_email_sent”},
name=“密码\u重置\u 1of4\u电子邮件\u请求”),
url(r“^password\u reset\u 2of4\u email\u sent/$”,
“django.contrib.auth.views.password\u reset\u done”,
{“模板名称”:“注册/密码重置\u2of4\u电子邮件\u sent.html”},
name=“密码重置\u 2of4\u电子邮件发送”),
url(r“^pwd_reset_3of 4_new_pwd_form/(?P\w+)/(?P[\w-]+)/$”,
“django.contrib.auth.views.password\u reset\u confirm”,

name=“password_reset_3of4_new_password_form”),#模板中的视图名称是字符串文字,而不是变量,因此在不更改模板的情况下无法覆盖它

如果使用
email\u template\u name
参数指定不同的模板,则可以扩展原始模板,并覆盖要更改的特定块

{% extends "registration/password_reset_email.html" %}
{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'password_reset_3of4_new_password_form' uidb64=uid token=token %}
{% endblock %}

就个人而言,我认为以这种方式更改视图名称会让其他习惯于使用原始名称的Django开发人员感到困惑。

为什么要更改名称?@DanielRoseman:因为四个密码重置视图的名称令人困惑。在你和@DanielRoseman之间,我现在确信不要更改名称。我在写信关于如何实现重置密码功能(作为自学工具),我不想教一些既有Django程序员无法接受的东西。还有一点很有趣,就是看看如何使用模板继承来扩展现有的模板,而不是我所经历的教程中通常使用的模板,在教程中,站点中的主模板会扩展一个“base.html”如果您正在编写教程,那么我认为您已经做出了一个很好的决定,坚持使用现有的名称,并解释每个视图的功能。Django中没有通用的
base.html
模板,因此大多数时候您必须自己创建它。请注意,您只能重写特定的块,因为您可以指定fy模板名称。如果您通过在模板目录中创建另一个“registration/password\u reset\u email.html”来覆盖模板,则无论如何都无法扩展“original”模板“registration/password\u reset\u email.html”。对,“base.html”是常见做法(通常使用该名称),而不是内置的任何内容。