在Django是否有一个实现视图模型装饰器aladraper的库?

2024-03-28 19:44:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Django中使用类似于Draper实现的“视图模型装饰器”。在

我已经使用了get_absolute_url及其变体(编辑、删除等)–这使得通用模型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 %}

当然,如果有更简洁干练的东西,比如:

^{pr2}$

Draper允许您定义传递给模板的模型应该是“修饰”的,也就是说,封装在一个提供额外方法的类中,并选择性地代理与实际模型类不匹配的所有内容—将特定于模型的模板逻辑与面向数据的模型方法分离开来。在

我真的不想污染我的模特去做这件事。在

如果我要手动执行类似的操作,那么在我看来,这将涉及到这样的操作:

def get_context_data(self, **kwargs):
    context = super(CapturesView, self).get_context_data(**kwargs)

    context.update({
        "article": ArticleDecorator(self.object)
    })

    return context

并且ArticleDecorator将定义link方法,并使用magic方法将任何其他attr调用传递给真正的Article对象。在

然而,手工完成所有这些都是相当麻烦的,Draper gem会自动处理一些事情,比如自动装饰装饰装饰模型的关系,例如ArticleDecorator.comments将返回CommentDecorator的列表,而不是{}。在


有没有库可以自动化视图的这种模型抽象?在


Tags: 方法模型self视图模板urlgetcontext