<p>因此,这里更干净、更安全的解决方案是使用<a href="https://docs.djangoproject.com/en/3.1/topics/class-based-views/generic-display/" rel="nofollow noreferrer">Class Based Views</a>(CBV)。有一个专门为显示对象列表而创建的通用CBV-<a href="https://docs.djangoproject.com/en/3.1/ref/class-based-views/generic-display/#listview" rel="nofollow noreferrer">ListView</a>。为了准确实现您所做的,代码将显示如下:</p>
<pre><code>from django.views.generic.list import ListView
class DashboardTaskAppView(ListView):
template_name = "task_app/task_dashboard.html"
# we override this method to
# get the queryset of objects we want to display
# rest of the work will be taken care of by "djnago"
def get_queryset(self):
usr = request.user
return Task.objects.filter(Q(author=usr) | Q(responsible=usr) | Q(public=True))
</code></pre>
<p>现在要在模板中获得想要的结果,我们只需像这样调用它</p>
<pre><code> {% for task in object_list %}
<h2>title - {{task.title}}</h2>
{% endfor %}
</code></pre>
<p>当使用CBV时,请记住在URL中使用如下路径</p>
<pre><code>path('your_url/', DashboardTaskAppView.as_view(), name='your_name'),
</code></pre>
<p>请阅读文档以发现完整的Django通用视图。它确实加快了您的工作速度,稍后重新格式化需要几秒钟而不是几小时</p>