2011-12-10 30 views
6

मैंने Django में पासवर्ड रीसेट पृष्ठों के लिए अपने स्वयं के कस्टम HTML टेम्पलेट्स सफलतापूर्वक जोड़े हैं और यह सब अच्छी तरह से काम कर रहा है। एकमात्र बिट मैं इसे अपने स्वयं के ईमेल विषय को शामिल करने के तरीके से बाहर नहीं कर सकता।Django पासवर्ड रीसेट ईमेल विषय

डिफ़ॉल्ट "पासवर्ड [मेरी साइट नाम] पर रीसेट है" और मैं स्पष्ट रूप से व्यवस्थापक में साइट का नाम बदल सकता हूं लेकिन क्या कोई जानता है कि संपूर्ण विषय पंक्ति को कैसे ओवरराइड किया जाए?

धन्यवाद।

उत्तर

13

विकास संस्करण

बस अपने टेम्पलेट्स में नई फ़ाइल 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 में

अगर आप internalization का उपयोग सिर्फ .po फ़ाइल में जोड़ने

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

अगर अगले कदमों का पालन न करें

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

यह समझ में आता है, क्या मुझे डिफ़ॉल्ट को ओवरराइड करने के लिए कुछ भी करने की ज़रूरत है? मैंने पासवर्ड /reset_subject.txt को उसी/पंजीकरण/डीआईआर में बाकी पासवर्ड रीसेट टेम्पलेट्स के रूप में रखा है लेकिन यह अभी भी डिफ़ॉल्ट विषय का उपयोग कर रहा है। – GivP

+0

असुविधा के लिए खेद है, जीव मैं थोड़ा गलत था। पथ TEMPLATE_DIRS सेटिंग पर निर्भर करता है।यदि टेम्पलेट//auth/registration/में काम किया जाना चाहिए –

+0

धन्यवाद एलेक्सी लेकिन मैं अभी भी यह काम करने में सक्षम नहीं हूं। क्या यह Django 1.3.0 के साथ काम करता है? क्योंकि मैंने contrib निर्देशिका में form.py को देखा है और password_reset_subject.txt का कोई उल्लेख नहीं है - पासवर्ड रीसेटफॉर्म क्लास 'सेव() विधि password_reset_subject.txt निर्दिष्ट नहीं करती है - विषय हार्ड-कोडेड है। कोई विचार है कि मैं इसे कैसे ओवरराइड कर सकता हूं? – GivP

0

PasswordResetForm आपके contrib.sites पर आधारित ईमेल भेजता है। यह उपयोग करने के लिए डोमेन नाम हो जाता है और एचटीएमएल टेम्पलेट से registration/password_reset_email.html

उपयोग व्यवस्थापक या Django खोल में गुजरता करके site

खोल में

आप ऐसा कर सकते हैं बदलने के लिए:

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

इसके लिए धन्यवाद लेकिन यह मेरे प्रश्न का उत्तर नहीं देता है। मैंने उल्लेख किया है कि मैं contrib.sites मान को कैसे बदल सकता हूं लेकिन विषय अभी भी "पासवर्ड रीसेट ..." कहेंगे - मैं जानना चाहता हूं कि "अपना पासवर्ड बदलें" कहने के लिए पूरे विषय को कैसे बदला जाए। – GivP

संबंधित मुद्दे