Django queryset应该在模板中调用还是传递到模板上下文中?



我问这个问题可能会有反弹,但这是我想知道一段时间的事情,所以现在开始。

在Django模板中,可以使用.all来获取查询集,如下所示:

{% for prerequisite in object.prerequisites.all %}
<li class="list-group-item">{{ prerequisite.text }}</li>
{% endfor %}

本例中的模型是这样的,但唯一相关的信息是上面的object通过ForeignKey与Prerequisite模型有关系。

class Prerequisite(models.Model):
content = models.ForeignKey(Content, on_delete=models.CASCADE,
related_name='prerequisites')
text = models.CharField(max_length=100)
def __str__(self):
return str(self.text)

我的问题是

在模板中调用Django查询集(即:object.prerequisites.all)是最佳实践,还是应该通过上下文在视图中传递它?

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['prerequisites'] = self.object.prerequisites.all()
return context

在模板中执行查询集确实很方便,但似乎应该将业务逻辑放在视图中。Django对此有明确的立场吗?

根据django文档:

  • https://docs.djangoproject.com/en/4.1/视图层

视图层-Django有"视图"的概念来封装负责处理用户请求和返回响应的逻辑。

  • https://docs.djangoproject.com/en/4.1/模板层

模板层模板层提供了一种设计器友好的语法,用于呈现要呈现给用户的信息。

我有不同的例子,我知道很多程序员喜欢将业务逻辑从views.py移动到serializer.py,即使序列化器生命的最初目的是-to serialize

我认为最合适的方法是在视图中pass your data through context

Views最初是你所有的业务逻辑,序列化器假设只有序列化,而模板的目的是显示html页面,python最初不是设计来操作html页面的

相关内容

  • 没有找到相关文章

最新更新