2014-10-28 78 views
0

我在Django中有文章模型。我拉了几段从数据库中每一篇文章,如下图所示(有一个降价的自定义模板标签):在Django模板变量的中间插入内容

{{ 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> 

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

回答

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 }}置于文章文本中,从而导致每篇文章在呈现时被删除。

0

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