[英]Django override password_reset_subject.txt does not change subject
[英]Django password reset email subject
我已經成功地為Django中的密碼重置頁面添加了我自己的自定義HTML模板,它們都運行良好。 唯一一點我無法解決它如何包括我自己的電子郵件主題。
默認為“[我的站點名稱]上的密碼重置”,我顯然可以在管理員中更改站點名稱,但有人知道如何覆蓋整個主題行嗎?
謝謝。
開發版
只需在模板目錄中創建新的文件registration/password_reset_subject.txt
。 這將覆蓋默認的django主題
和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中重寫保存方法(我知道它不干,但應該工作:)
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])
大約8個月前已經修復了這個問題,但這個改變似乎沒有合並到1.3.1中。 請參閱: https : //github.com/django/django/commits/master/django/contrib/auth/templates
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.