Джанго шаблоны и уценка - PullRequest
1 голос
/ 30 августа 2011

Предположим, у меня есть шаблон Django, написанный на Markdown.

Имеет ли смысл сначала обработать уценку, а затем визуализировать шаблон, или я должен отрисовать шаблон, а затем отправить его через фильтр Markdown?

С точки зрения вычислений первое предпочтительнее, так как я собираюсь отображать шаблон в цикле.Мне просто интересно, есть ли какие-то возможные недостатки, о которых я не думаю.

Некоторый код для справки:

import markdown
from django import template

# Here, template_content_md would actually come from the database
template_content_md = """
{{ obj.title }}
-----------
**{{ obj.author }}**

(more Markdown content here using variables)

[More info]({{ obj.get_absolute_url }})
"""

output_list = []

# first method
template_content_html = markdown.markdown(template_content_md)
for obj in object_list:
    tt = template.Template(template_content_html)
    content_html = tt.render(Context({'obj': obj}))
    output_list.append(content_html)

#second method
for obj in object_list:
    tt = template.Template(template_content_md)
    content_md = tt.render(Context({'obj': obj}))
    content_html = markdown.markdown(content_md)
    output_list.append(content_html)

Как вы можете видеть, во второй версии, markdown.markdown запускается один раз для каждого obj в object_list.

1 Ответ

2 голосов
/ 30 августа 2011

Поскольку то, что вы генерируете из содержимого, отформатированного в Markdown, является шаблоном Django, имеет смысл использовать ваш первый метод (сгенерировать HTML из шаблона Markdown, а затем использовать сгенерированный шаблон Django вloop).

Помимо того, что он быстрее, он также гарантирует, что ничего из obj не будет случайно переведено в HTML Markdown.

Я бы также"кеш"шаблон Django:

template_content_html = markdown.markdown(template_content_md)
# Only generate the template once
tt = template.Template(template_content_html)

for obj in object_list:
    content_html = tt.render(Context({'obj': obj}))
    output_list.append(content_html)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...