2010-08-06 133 views
1

我有一個觀點FUNC這樣的:Django「評估」過濾器?

def user_agreement(request): 
    return response(request, template='misc/flatpage.html', 
      vars={'fp':FlatPage.objects.get(key='user-agreement')}) 

然後模板看起來是這樣的:

<h2>{% block title %}{{ fp.title }}{% endblock %}</h2> 

{{ fp.content|markdown }} 

這工作得很好,但我也想加入一些Django的{{filters}}在內容。有沒有「評估」過濾器,所以我可以這樣做:

{{ fp.content|evaluate|markdown }} 

它會替代我所有的變量?或者最簡單/最好的方法是什麼?

回答

2

我不確定是否正確理解您的問題,但以下方法可能有效。

flatpage.content視爲模板,並使用您希望的任何上下文將其呈現在視圖中。

# view 
from django.template import Template, Context 

def user_agreement(request): 
    flatpage = FlatPage.objects.get(key='user-agreement') 
    t = Template(flatpage.content) 
    fp_content = t.render(Context({})) 
    return response(request, template='misc/flatpage.html', 
     vars={'title': flatpage.title, 'content': fp_content}) 

然後在misc/flatpage.html模板中應用降價過濾器。

<h2>{% block title %}{{ title }}{% endblock %}</h2> 

{{ content|markdown }} 
+0

是的,這就是我的意思。我想評估/解析它作爲模板。這當然是一種解決方案,但現在我不得不考慮重構,因爲我不想寫這10次:) – mpen 2010-08-07 00:52:04

+0

如果你只需要在你的flatpage內容中使用過濾器,那麼它應該直接實現'評估'作爲一個字符串過濾器。如果它需要上下文,那麼它有點棘手。希望你拿出一個很好的DRY解決方案來避免寫10次:) – Alasdair 2010-08-07 21:07:23