gpt4 book ai didi

python - 是否有用于在 Django 中实现 View 模型装饰器 ala Draper 的库?

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:07 25 4
gpt4 key购买 nike

我想要像 Draper 这样的“ View 模型装饰器”在 Django 中为 Rails 实现。

我已经使用了 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 %}

如果有更简洁和 DRY 的东西当然会很好,比如:

{{ user.link }}

{{ user.edit_link }}

Draper 所做的是允许您定义传递给模板的模型应该被“装饰”,即包装在一个提供额外方法的类中,并可选择代理所有与真实模型类不匹配的东西——分离模型特定的模板逻辑远离面向数据的模型方法。

我真的不想污染我的模型来做这件事。

如果我要手动执行类似的操作,在我看来它会像这样执行:

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


是否有任何库可以自动对 View 进行这种模型抽象?

最佳答案

在 Django 中,在不触及原始模型的情况下向模型添加特定行为通常使用 "proxy model" 来完成。

关于python - 是否有用于在 Django 中实现 View 模型装饰器 ala Draper 的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29843264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com