在Django模板中,我想从模型字段中添加文本。该文本字段可以理解为文本模板本身。它可能看起来像:
Dear {{user}},
thank your for...
Regards,
{{sender}}
此文本字段在普通Django模板中以emailtemplate
形式提供。上面的字段(user
= Joe,sender
= Alice)也可用。
{% extends 'base.html' %}
{% block content %}
{{ emailtemplate }}
{% endblock %}
输出如下
Dear Joe,
thank your for...
Regards,
Alice
我不知道如何使用内置方法执行此操作。我唯一的想法是在将其移交给模板引擎之前手动解析emailtemplate
,因此在视图中。但我确定,我不是第一个遇到这个问题的人。
答案 0 :(得分:2)
经过多次返工后,我想出了以下解决方案。仔细检查谁可以修改/修改模板字符串,因为这可能是一个很大的安全漏洞,如果错误的人可以改变。
views.py
:
class YourView(TemplateView):
template_name = 'page.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["emailtemplate"] = "Dear {{user}}, {{sender}}"
context["user"] = "Joe"
context["sender"] = "Alice"
return context
page.html
:
{% extends 'base.html' %}
{% load core_tags %}
{% block content %}
{% foobar emailtemplate %}
{% endblock %}
your_app/templatetags/core_tags.py
(不要忘记__init__.py
文件以确保将目录视为Python包your_app
也必须在INSTALLED_APPS
中):
from django.template import Template
register = template.Library()
@register.simple_tag(takes_context=True)
def foobar(context, ts):
t = Template(template_string=ts)
return t.render(context)
另见:
https://docs.djangoproject.com/en/2.0/howto/custom-template-tags/#code-layout https://docs.djangoproject.com/en/2.0/howto/custom-template-tags/#simple-tags