2013-02-15 61 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