2017-12-09 14 views
0

Ich erstelle eine E-Mail-Vorlage für Benutzer, die ihre Kennwörter erfolgreich aktualisiert haben.Django Autoescape funktioniert nicht in render_to_string (Vorlage)?

Ich habe {{autoescape off}} in der Vorlage verwendet, die mit render_to_string() gerendert wird.

der E-Mail-Inhalt zeigt dies die HTML-spitzen Klammern direkt wie jedoch:

Hallo < span style = 'color: blue' > Benutzer! </span >

Ihr Passwort wurde erfolgreich aktualisiert!


ich Django2.0 und meinen Code verwende sieht wie folgt aus:

views.py

from django.core.mail import send_mail 
from django.template.loader import render_to_string 

def sendmail(request, title) 
    email_title = title 
    email_content = render_to_string('template.html',{'username':request.user.username}) 
    recipient = request.user.email 
    send_mail(
      email_title, 
      email_content, 
      '[email protected]', 
      [recipient,], 
      ) 

template.html

{{ autoescape off}} 
Hi <span style='color:blue'>user! </span> 
Your password is updated successfully! 
{{ endautoescape }} 

Ist dort ein stimmt etwas mit meinem Code nicht?

Sonst ist Autoescape bei der Verwendung von render_to_string() immer eingeschaltet?

+0

Dies nichts mit Auto Entkommen zu tun haben kann. Das gilt für HTML, das aus einer Variablen in die Vorlage eingefügt wird, die Sie nicht tun. –

Antwort

2

Dies hat nichts mit Autoescape zu tun, das zum Rendern von Variablen dient (es ist auch ein Template-Tag, also verwenden Sie es mit {% autoescape off %}, nicht {{ autoescape off }}). Es tut nichts in Ihrer aktuellen Vorlage.

Ihr Problem besteht darin, dass Sie versuchen, HTML in den Textkörper einer E-Mail einzufügen.

send_mail erwartet einen Nur-Text-Nachrichtentext. Wenn Sie einen HTML-Körper haben wollen, dann müssen Sie ein html_message Argument liefern:

send_mail(
    email_title, 
    '', # Empty plain text body - not recommended and you should supply a plain text alternative 
    '[email protected]', 
    [recipient,], 
    html_message=email_content, # This will render as HTML 
) 
+0

Sie haben Recht! Die send_mail() erwartet nur reinen Text und deshalb konnte ich kein Styling hinzufügen. Auch danke, dass Sie auf den Template-Tag-Fehler hingewiesen haben. : P – Kavie

Verwandte Themen