django

2010-07-13 13 views
20

में एचटीएमएल ईमेल भेजना मेरी परियोजना में मैंने एक न्यूजलेटर फ़ीड जोड़ा है। लेकिन जब इस समारोह के साथ ईमेल भेजने की कोशिश कर:django

def send(request): 
    template_html = 'static/newsletter.html' 
    template_text = 'static/newsletter.txt' 
    newsletters = Newsletter.objects.filter(sent=False) 
    subject = _(u"Newsletter") 
    adr = NewsletterEmails.objects.all() 
    for a in adr: 
     for n in newsletters: 
      to = a.email 
      from_email = settings.DEFAULT_FROM_EMAIL   
      subject = _(u"Newsletter Fandrive") 
      text = get_template(template_text) 
      html = get_template(template_html) 
      d = { 'n': n,'email': to } 
      text_content = text.render(d) 
      html_content = html.render(d) 

      msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) 
      msg.attach_alternative(html_content, "text/html") 
      msg.send() 

उन टेम्पलेट का उपयोग कर:

//text 

=================== Newsletter - {{ n.date }} ============ 
========================================================== 
         {{ n.title }} 
==========================================================   
{{ n.text }} 
========================================================== 

//html 

<html> 
    <head> 
    </head> 
    <body> 
    <div style=""> 
     <div style=""> 
      <h1 style="">{{ n.title }} - {{n.date}}</h1> 
       <p style="">    
        {{ n.text }} 
       </p> 
     </div> 
    </div> 
    </body> 
</html> 

और मॉडल:

class Newsletter(models.Model): 
    title = models.CharField("title", blank=False, max_length=50) 
    text = models.TextField("text", blank=False) 
    sent = models.BooleanField("sent", default=False) 
    data = models.DateTimeField("creation date", auto_now_add=True, blank=False) 

class NewsletterEmails(models.Model): 
    email = models.EmailField(_(u"e-mail address"),) 

मैं हो रही है:

TemplateSyntaxError at /utils/newsletter_send/
Caught an exception while rendering: 'dict' object has no attribute 'autoescape'

में {{n.date}} text_email खाके में

हालांकि मेरी डिबग मैं उचित न्यूज़लेटर टेम्पलेट के लिए वस्तुओं भेज रहा है, साथ ही डिबग संदर्भ के रूप में दिखाता है:

context {'email': u'[email protected]', 'n': <Newsletter: Newsletter object>}

क्यों है क्या हो रहा है? इस त्रुटि के बारे में मुझे जो मिला है उससे यह किसी भी तरह से टेम्पलेट रेंडरर को खाली शब्दकोश भेजने के लिए जुड़ा हुआ है, लेकिन मेरा खाली नहीं है ...

+0

में एचटीएमएल संदेशों 'डेटा' के रूप में नामित किया गया है कि अनुमति देने के लिए है: मैं ऐसा करने का एक और तरीका मिल गया है प्रश्न पोस्ट करते समय एक टाइपो या आपके पास कोड में भी ऐसा ही है ?? – Ashok

+0

टाइपो, यह हर जगह तारीख है। डुनो हालांकि यह कैसे हो सकता है ... :) – crivateos

+0

#django लॉग में मैंने पढ़ा है 'आप एक ऐसी वस्तु को पास कर रहे हैं जो एक संदर्भ वस्तु की अपेक्षा कर रहा था।' । इसे कैसे हल करें? – crivateos

उत्तर

10

यह एक बहुत ही सरल फिक्स है, आप एक मामूली बात याद कर रहे हैं।

आप यह कर रहे हैं:

d = { 'n': n,'email': to } 

अपने प्रस्तुत करना() विधि के हिस्से के रूप कि शब्दकोश का उपयोग करने की कोशिश कर रहा इसके बाद। एक Context हालांकि, render उठाकर आपको ऐसा करने की जरूरत:

d = Context({ 'n': n,'email': to }) 

रूप में अच्छी तरह django.template से आयात करना सुनिश्चित करें। आपको जो त्रुटि मिल रही है उसे ठीक करना चाहिए।

17

बस सूचना के उद्देश्य के लिए। ,

def send(request): 
    template_html = 'static/newsletter.html' 
    template_text = 'static/newsletter.txt' 
    newsletters = Newsletter.objects.filter(sent=False) 
    subject = _(u"Newsletter Fandrive") 
    adr = NewsletterEmails.objects.all() 
    for a in adr: 
     for n in newsletters: 
      to = a.email 
      from_email = settings.DEFAULT_FROM_EMAIL   
      subject = _(u"Newsletter Fandrive") 

      text_content = render_to_string(template_text, {"title": n.title,"text": n.text, 'date': n.date, 'email': to}) 
      html_content = render_to_string(template_html, {"title": n.title,"text": n.text, 'date': n.date, 'email': to}) 

      msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) 
      msg.attach_alternative(html_content, "text/html") 
      msg.send() 

    return HttpResponseRedirect('/') 
+0

हाँ। यह करने का यह एक अच्छा तरीका है। – bozdoz

+2

आपने django.core.mail आयात से आयात विवरण छोड़ दिया ईमेलमल्टी विकल्प ' –

+1

क्या यह HTML ईमेल भेजना है या यह कैसे काम करता है? मैं इस दृष्टिकोण की कोशिश कर रहा हूं लेकिन मुझे Django> = 1.7 के लिए केवल टेक्स्ट संदेश –

11

वे send_mail नवीनीकृत किया है dev version

def send(request): 
    template_html = 'static/newsletter.html' 
    template_text = 'static/newsletter.txt' 
    newsletters = Newsletter.objects.filter(sent=False) 
    subject = _(u"Newsletter Fandrive") 
    adr = NewsletterEmails.objects.all() 
    for a in adr: 
     for n in newsletters: 
      to = a.email 
      from_email = settings.DEFAULT_FROM_EMAIL   
      subject = _(u"Newsletter Fandrive") 

      text_content = render_to_string(template_text, {"title": n.title,"text": n.text, 'date': n.date, 'email': to}) 
      html_content = render_to_string(template_html, {"title": n.title,"text": n.text, 'date': n.date, 'email': to}) 

      send_mail(subject, text_content, from_email, 
      to, fail_silently=False, html_message=html_content) 
    return HttpResponseRedirect('/') 
अपने मॉडल परिभाषा दिनांक फ़ील्ड में
+2

मिलता है – laffuste