2013-02-15 57 views
0

有什么方法可以使用Django的模板系统来渲染模板文件并返回三个离散对象吗?单个Django模板可能呈现给多个对象吗?

使用案例:我正在制作一个电子邮件,它将根据一些请求参数进行呈现。每封电子邮件由a)主题,b)纯文本版本,c)html版本组成。理想情况下,我希望所有这些来自单个模板文件而不是三个单独的文件,以便于维护。

任何想法?

+0

您可以使用Django的模板引擎在您的模板中包含条件循环?虽然在你的情况下,模板继承系统可能毕竟是正确的工具,因为它很好地分离了不同的用例。 – 2013-02-15 18:31:15

+0

您可以检出'include'标签;或尝试创建自定义标签;我很久以前在django工作过;现在不记得了... – mshsayem 2013-02-15 18:32:59

回答

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 %} 

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

+0

看起来不错!在研究这个过程中,我碰到了可能会使用的这个Django模块:https://github.com/bradwhittington/django-templated-email;但你的解决方案也可以。谢谢! – alukach 2013-02-15 19:01:44

+0

非常好。现在书签:) – Brandon 2013-02-15 19:09:25