2014-10-28 76 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解析內容並將其分解成段落列表,然後將該列表分配給可以遍歷的變量。