在Django模板变量的中间插入内容

时间:2014-10-28 20:11:48

标签: python django jinja2

我在Django中有一个文章模型。我从数据库中为每篇文章提取了几个段落,如下所示(有一个Markdown自定义模板标记):

{{ article.text|markdownify|safe }}

这给了我类似的东西:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.</p>
<p>Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur.</p>
<p>Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus.</p>

我想知道是否可以在这些段落之间插入一些东西,也许是另一个包含数据库中其他信息的Django变量或一些更复杂的逻辑(如果语句等)。在我的情况下,它将是一组图像。

我的目标是这样:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.</p>
<p>Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur.</p>

{% if 1==1 %}
  {{ article.more_stuff }}
{% endif %}

<p>Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus.</p>

有没有一种优雅的方法来实现这一目标?谢谢。

2 个答案:

答案 0 :(得分:1)

您可以通过custom template tag完成此操作。类似的东西:

from django import template

register = template.Library()

@register.simple_tag(takes_context=True)
def render_article(context, article):
    t = template.Template(article.text)
    return t.render(context)

然后在你的模板中:

{% render_article article %}

将字符串呈现为模板的文档为here。只是非常谨慎地允许不受信任的用户创建文章。有人可以将{{ article.__class__.objects.all.delete }}放入文章文本中,导致每篇文章在呈现时都被删除。

答案 1 :(得分:0)

没有任何内置方法可以做到这一点。您可以自己实现一些东西,可能是使用模板标记的形式,使用BeautifulSoupv解析内容并将其分解为段落列表,然后将该列表分配给您可以迭代的变量。