2010-08-06 67 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