Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django密码重置电子邮件主题_Python_Django - Fatal编程技术网

Python Django密码重置电子邮件主题

Python Django密码重置电子邮件主题,python,django,Python,Django,我已经成功地为Django中的密码重置页面添加了我自己的自定义HTML模板,一切都很好。唯一的一点我不知道如何包括我自己的电子邮件主题 默认设置为“在[my site name]上重置密码”,我可以在admin中更改站点名称,但有人知道如何覆盖整个主题行吗 谢谢。将根据您的contrib.sites发送电子邮件。它获取要使用的域名并将其传递到位于registration/password\u reset\u email.html的html模板 使用admin或django shell更改站点 在

我已经成功地为Django中的密码重置页面添加了我自己的自定义HTML模板,一切都很好。唯一的一点我不知道如何包括我自己的电子邮件主题

默认设置为“在[my site name]上重置密码”,我可以在admin中更改站点名称,但有人知道如何覆盖整个主题行吗

谢谢。

将根据您的
contrib.sites
发送电子邮件。它获取要使用的域名并将其传递到位于
registration/password\u reset\u email.html的html模板

使用admin或django shell更改
站点

在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

开发版本

只需在模板目录中创建新文件
registration/password\u reset\u subject.txt
。这将覆盖默认的django主题

第150行

在Django 1.3中

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

#: forms.py:143
#, python-format
msgid "Password reset on %s"
msgstr "YOUR SUBJECT HERE %s"
如果没有,请进行下一步

在根URL.py中

# change to your custom view
(r'^password_reset/$', 'your_app.views.password_reset'),
在您的应用程序/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):
在你的应用程序/forms.py中重写save方法(我知道它不干燥,但应该可以工作:)


这在大约8个月前已经修复,但这一更改似乎并没有被合并到1.3.1中。见:

谢谢,但它没有回答我的问题。我已经提到我知道如何更改contrib.sites值,但主题仍然会说“密码重置打开…”-我想知道如何将整个主题更改为“更改您的密码”。这很有意义,我需要做什么才能使其覆盖默认值?我已将password_reset_subject.txt与其他密码重置模板放在相同的/registration/dir中,但它仍使用默认主题。对于给您带来的不便,我深表歉意,Giv I有点错误。路径取决于模板的目录设置。如果模板将被放置在//auth/registration/should works中,谢谢Alexey,但我仍然无法完成此工作。这是否适用于Django 1.3.0?因为我只是查看了contrib目录中的forms.py,没有提到password\u reset\u subject.txt-PasswordResetForm类的save()方法没有指定password\u reset\u subject.txt-主题是硬编码的。你知道我该怎么做吗?我刚刚更新了答案。这段代码未经测试,但希望您能捕捉到以下错误:异常值:“CustomPasswordResetForm”对象没有属性“users\u cache”
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])