Django密码重置电子邮件主题

时间:2011-12-10 13:11:10

标签: python django

我已成功为Django中的密码重置页面添加了我自己的自定义HTML模板,并且它们都运行良好。唯一一点我无法弄清楚如何包含我自己的电子邮件主题。

默认为“[我的网站名称]上的密码重置”,我显然可以在管理员中更改网站名称,但有人知道如何覆盖整个主题行吗?

感谢。

3 个答案:

答案 0 :(得分:15)

开发版

只需在模板目录中创建新文件registration/password_reset_subject.txt即可。这将覆盖默认的django主题

请参阅https://github.com/django/django/blob/master/django/contrib/auth/templates/registration/password_reset_subject.txt

https://github.com/django/django/blob/master/django/contrib/auth/forms.py第150行

在Django 1.3中

如果您使用内部化,只需添加.po文件

#: forms.py:143
#, python-format
msgid "Password reset on %s"
msgstr "YOUR SUBJECT HERE %s"

如果不是下一步

在root urls.py

# change to your custom view
(r'^password_reset/$', 'your_app.views.password_reset'),
你的your_app / views.py

中的

from django.contrib.auth.views import password_reset as django_password_reset
from .forms import CustomPasswordResetForm

# reuse Django view, but change form
def password_reset(*args, **kwargs):
    kwargs['password_reset_form'] = CustomPasswordResetForm
    django_password_reset(*args, **kwargs):

在your_app / forms.py中重写保存方法(我知道它不是DRY但应该可以工作:)

class CustomPasswordResetForm(PasswordResetForm):
    def save(self, domain_override=None, email_template_name='registration/password_reset_email.html',
         use_https=False, token_generator=default_token_generator, request=None):
        from django.core.mail import send_mail
        for user in self.users_cache:
            if not domain_override:
                current_site = get_current_site(request)
                site_name = current_site.name
                domain = current_site.domain
            else:
                 site_name = domain = domain_override
            t = loader.get_template(email_template_name)
            c = {
            'email': user.email,
            'domain': domain,
            'site_name': site_name,
            'uid': int_to_base36(user.id),
            'user': user,
            'token': token_generator.make_token(user),
            'protocol': use_https and 'https' or 'http',
            }
            send_mail(_("YOUR SUBJECT HERE %s") % site_name,
                t.render(Context(c)), None, [user.email])

答案 1 :(得分:1)

大约8个月前已经修复了这个问题,但这个改变似乎没有合并到1.3.1。看到: https://github.com/django/django/commits/master/django/contrib/auth/templates

答案 2 :(得分:0)

PasswordResetForm根据您的contrib.sites发送电子邮件。它获取要使用的域名,并将其传递给registration/password_reset_email.html

的html模板

使用admin或django shell更改site

在shell中你可以这样做:

>>> from django.contrib.sites.models import Site
>>> my_site = Site(domain='your_domain.com', name='Your Domain')
>>> my_site.save()
>>> print my_site.id
2
>>>
你在settings.py中的

SITE_ID = 2