单个Django模板可以渲染到多个对象吗?

时间:2013-02-15 18:21:31

标签: django django-templates

有没有办法使用Django的模板系统渲染模板文件并返回三个离散对象?

使用案例:我正在整理一封基于某些请求参数呈现的电子邮件。每封电子邮件包括a)主题,b)纯文本版本,c)html版本。理想情况下,我希望所有这些都来自单个模板文件而不是三个单独的文件,以便于维护。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我会使用render_to_string,传入要渲染的部分的参数。这将允许您使用一个模板并一次渲染模板的一部分。

from django.template.loader import render_to_string

subject = render_to_string('the-template.html',
    {'section': 'subject', 'subject': 'Foo bar baz'})
plain_text = render_to_string('the-template.html',
    {'section': 'text', 'text': 'Some text'})
html = render_to_string('the-template.html',
    {'section': 'html', 'html': '<p>Some html</p>'})


#the-template.html
{% if section == 'subject' %}
    {{ subject }}
{% elif section == 'text' %}
    {{ plain_text }}
{% else %}
    <h1>A headline, etc.</h1>
    {{ html }}
{% endif %}

您还可以将传入请求中所需的任何值传递到上下文中的模板。