因此,我已经阅读了有关Django动态过滤的这篇文章; Dynamic filtering
尽管我有一些工作要做,但我需要两个类似的视图,一个视图以其子标题作为参数显示所有不同类别,第二个视图以不带参数的形式显示所有类别的所有帖子。
如何使用单个ListView并从模板传递空参数以显示列表中所有类别的所有帖子?
还是有可能吗?
urlpatterns = [
path('', views.PostListView.as_view(), name='index'),
path('<slug:slug>/', views.PostbyCategoryListView.as_view(), name="category"),
]
class PostListView(ListView):
model = Post
template_name = 'index.html'
class PostbyCategoryListView(ListView):
model = Post
template_name = 'index.html'
def get_queryset(self):
self.category = get_object_or_404(Category, slug=self.kwargs['slug'])
return Post.objects.filter(category=self.category)
...
<h6>Categories</h6>
{% if category_list %}
<ul>
<li class="category-item">
<a href="{% url 'index' %}">All categories</a>
</li>
{% for category in category_list %}
<li class="category-item">
<a href="{% url 'category' category.slug %}">{{ category.name }}</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>No categories</p>
{% endif %}
...
class Category(models.Model):
name = models.CharField(max_length=200)
slug = models.CharField(max_length=200)
class Post(models.Model):
category = models.ForeignKey('Category',default=1, on_delete=models.SET_NULL, null=True, related_name="posts")
title = models.CharField(max_length=200)
content = models.TextField(max_length=2000)