我问这个问题可能会有反弹,但这是我想知道一段时间的事情,所以现在开始。
在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页面的