2017-12-09 1 views
0

사용자가 비밀번호를 성공적으로 업데이트했을 때 이메일 템플릿을 초안을 작성 중입니다.Django autoescape가 render_to_string (템플릿)에서 작동하지 않습니다?

나는 템플릿에서 {{autoescape off}}를 사용했으며 이는 render_to_string()을 사용하여 렌더링되었습니다.

그러나 이메일의 내용은 다음과 같이 직접 HTML의 꺾쇠 괄호를 보여줍니다

안녕 < 스팬 스타일 = '색상 : 블루'> 사용자! </span >

비밀번호가 성공적으로 업데이트되었습니다. 내가 Django2.0 내 코드를 사용하고


은 다음과 같습니다

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

인가

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 거기에 내 코드가 잘못 되었나요?

그렇지 않으면 render_to_string()을 사용하는 동안 autoescape가 항상 켜져 있습니까?

+0

이 자동 이스케이프와 아무 상관이 없습니다. 이는 템플릿에서 템플릿에 삽입 된 HTML에 적용됩니다. –

답변

2

변수 렌더링을위한 autoescape와는 아무런 관련이 없습니다 (템플릿 태그이기도하므로 이 아닌 {% autoescape off %}과 함께 사용하십시오). 현재 템플릿에서 아무 것도하지 않습니다.

귀하의 문제는 귀하가 HTML의 일반 텍스트 본문에 HTML을 넣으려고한다는 것입니다.

send_mail은 일반 텍스트 메시지 본문을 필요로합니다. 당신은 HTML의 몸을 갖고 싶어한다면 당신은 html_message 인수를 제공해야합니다

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

당신이 옳습니다! send_mail()은 평범한 텍스트만을 기대하기 때문에 스타일을 추가 할 수 없습니다. 또한 템플릿 태그 실수를 지적 해 주셔서 감사합니다. :피 – Kavie

관련 문제