我希望"查看模型装饰者"像Django中的Draper实现Rails一样。
我已经使用get_absolute_url
及其变体(编辑,删除等) - 这使得反转常见模型网址变得更容易,但现在我发现自己在模板中写了很多这样的东西:
{% if user has 'accounts.view_user' of article.author %}
<a href="{{ article.author.get_absolute_url }}" class="fn">
{{ article.author.name }}
</a>
{% else %}
{{ article.author.name }}
{% endif %}
肯定会有更简洁和干燥的东西,比如:
{{ user.link }}
{{ user.edit_link }}
Draper所做的是允许您定义传递给模板的模型应该是&#34;装饰&#34;即包含在提供额外方法的类中,并且可选地代理与实际模型类不匹配的所有内容 - 将模型特定的模板逻辑与数据导向的模型方法分开。
我真的不想污染我的模特去做。
如果我要手动执行类似的操作,那么在我的视图中会这样做:
def get_context_data(self, **kwargs):
context = super(CapturesView, self).get_context_data(**kwargs)
context.update({
"article": ArticleDecorator(self.object)
})
return context
ArticleDecorator
将定义链接方法,并使用魔术方法将任何其他attr调用传递给真正的Article
对象。
然而,手动完成所有这些操作非常麻烦,Draper gem会自动完成诸如自动装饰装饰模型关系之类的事情。 ArticleDecorator.comments
会返回CommentDecorator
而不是Comments
的列表。
是否有任何库可以为视图自动化这种模型抽象?