我正在构建一个发送电子邮件的函数,并且需要在电子邮件的 HTML 模板中使用 context_processor 变量,但这不起作用。
Example:
def send_email(plain_body_template_name, html_body_template_name):
plain_body = loader.render_to_string(plain_body_template_name, context)
html_body = loader.render_to_string(html_body_template_name, context)
email_msg = EmailMultiAlternatives(body=plain_body)
email_msg.attach_alternative(html_body, 'text/html')
email_message.send()
按照我的习惯context_processor.py
我只有一个函数可以接收HttpRequest
并返回一个像这样的字典{'foo': 'bar'}
,在模板中我尝试使用{{foo}}
.
我在中添加了 context_processorTEMPLATE['OPTIONS']['context_processors']
too.
假设您正在使用django
后端在你的TEMPLATE
with
'BACKEND': 'django.template.backends.django.DjangoTemplates',
django 看到你还没有传递请求并选择一个基本的Context
包装你的字典而不是RequestContext
这将处理context_processors
你已经定义了。
你可能可以逃避做
html_body = loader.render_to_string(html_body_template_name, context, request=request)
但您需要传入请求对象。
但这可能没有意义。您是否正在向提出请求的人发送电子邮件?包含上下文是否有意义?
如果您的上下文处理器不需要request
然后我要么将其设为一个简单的实用函数(如果仅在此处调用),要么将请求参数设为可选,将其导入到此模块中,然后将其直接添加到上下文中
context = {"my_var": 1}
context.update(your_extra_context())
loader.render_to_string(...)
有一些复杂的更新方法Context()
分层,但我认为这里没有必要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)