如何更改默认Django reset-your-password电子邮件模板引用的视图名称?

时间:2015-02-17 19:03:30

标签: 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 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_reset_confirm视图中使用此替代名称:password_reset_3of4_new_password_form

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"),
)

有没有办法更改默认电子邮件模板使用的视图名称?我在password_reset视图中没有看到任何相关参数。我想避免手动复制然后编辑此模板(然后由email_template_name参数引用)。

1 个答案:

答案 0 :(得分:1)

模板中的视图名称是字符串文字,而不是变量,因此您无法在不更改模板的情况下覆盖它。

如果使用email_template_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开发人员感到困惑。