2013-02-15 3 views
0

Есть ли способ использовать систему шаблонов Django для визуализации файла шаблона и возврата трех дискретных объектов?Возможно ли создать один шаблон Django для нескольких объектов?

Случай использования: Я собираю электронное письмо, которое должно быть отображено на основе некоторых параметров запроса. Каждое электронное письмо состоит из a) субъекта, b) версии с открытым текстом, c) версии html. В идеале я бы хотел, чтобы все они были получены из одного файла шаблона, а не из трех отдельных файлов, чтобы упростить обслуживание.

Любые идеи?

+0

Вы можете включить условные циклы в свой шаблон, используя механизм шаблонов Django? Хотя в вашем случае система наследования шаблонов может быть правильным инструментом, потому что она прекрасно отделяет различные варианты использования. –

+0

Вы можете проверить тег 'include'; или попробуйте создать собственный тег; Я давно работал в джанго; теперь не помню ... – mshsayem

ответ

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

+0

Очень приятно. Закладка сейчас :) – Brandon

Смежные вопросы