2011-12-10 37 views
6

Tôi đã thêm thành công mẫu HTML tùy chỉnh của riêng mình cho các trang đặt lại mật khẩu ở Django và tất cả đều hoạt động tốt. Tôi chỉ không thể tìm ra cách để đưa chủ đề email của mình vào.Chủ đề email đặt lại mật khẩu Django

Mặc định là "Đặt lại mật khẩu trên [tên trang web của tôi]" và tôi rõ ràng có thể thay đổi tên trang web trong quản trị nhưng có ai biết cách ghi đè toàn bộ dòng chủ đề không?

Cảm ơn.

Trả lời

13

Version Phát triển

Chỉ cần tạo tệp mới registration/password_reset_subject.txt trong thư mục mẫu của bạn. Điều này sẽ ghi đè django mặc định đối tượng

Xem 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 dòng 150

Trong Django 1,3

nếu bạn sử dụng nội tâm chỉ cần thêm trong .po tập tin

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

nếu không folow bước tiếp theo

trong rễ urls.py

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

trong 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): 

viết lại của bạn tiết kiệm phương pháp trong your_app bạn/forms.py (Tôi biết nó không khô nhưng nên làm việc:)

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]) 
+0

Điều này có ý nghĩa, có bất kỳ điều gì tôi cần làm để ghi đè lên mặc định không? Tôi đã đặt password_reset_subject.txt trong cùng một/đăng ký/dir như phần còn lại của mẫu đặt lại mật khẩu nhưng vẫn sử dụng chủ đề mặc định. – GivP

+0

Xin lỗi vì sự bất tiện, Giv tôi đã sai một chút. Đường dẫn phụ thuộc vào cài đặt TEMPLATE_DIRS.Nếu mẫu sẽ được đặt trong//auth/registration/nên hoạt động –

+0

Cảm ơn Alexey nhưng tôi vẫn không thể thực hiện công việc này. Điều này làm việc với Django 1.3.0? Bởi vì tôi chỉ xem forms.py trong thư mục contrib và không đề cập đến password_reset_subject.txt - phương thức save() của lớp PasswordResetForm không chỉ định password_reset_subject.txt - chủ đề được mã hóa cứng. Bất kỳ ý tưởng làm thế nào tôi có thể ghi đè lên điều này? – GivP

0

PasswordResetForm gửi email dựa trên số contrib.sites của bạn. Nó được tên miền để sử dụng và chuyển nó vào template html tại registration/password_reset_email.html

sử dụng quản trị hoặc django vỏ để thay đổi site

trong vỏ bạn có thể làm điều này bằng cách thực hiện:

>>> 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 
>>> 

trong settings.py của bạn:

SITE_ID = 2 
+0

Cảm ơn điều này nhưng không trả lời được câu hỏi của tôi. Tôi đã đề cập đến tôi biết làm thế nào để thay đổi giá trị contrib.sites nhưng chủ đề vẫn sẽ nói "Đặt lại mật khẩu trên ..." - Tôi muốn biết cách thay đổi toàn bộ chủ đề để nói "Thay đổi mật khẩu của bạn". – GivP

Các vấn đề liên quan