Python Django密码重置电子邮件主题
我已经成功地为Django中的密码重置页面添加了我自己的自定义HTML模板,一切都很好。唯一的一点我不知道如何包括我自己的电子邮件主题 默认设置为“在[my site name]上重置密码”,我可以在admin中更改站点名称,但有人知道如何覆盖整个主题行吗 谢谢。将根据您的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更改站点 在
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])