以下是一个按类别列出django列表,使用IndexView和DetailView类的示例代码:
# models.py
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Item(models.Model):
name = models.CharField(max_length=100)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.name
# views.py
from django.views.generic import ListView, DetailView
from .models import Category, Item
class CategoryListView(ListView):
model = Category
template_name = 'category_list.html'
context_object_name = 'categories'
class CategoryDetailView(DetailView):
model = Category
template_name = 'category_detail.html'
context_object_name = 'category'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['items'] = Item.objects.filter(category=self.object)
return context
# urls.py
from django.urls import path
from .views import CategoryListView, CategoryDetailView
urlpatterns = [
path('categories/', CategoryListView.as_view(), name='category_list'),
path('categories//', CategoryDetailView.as_view(), name='category_detail'),
]
# category_list.html
{% for category in categories %}
{{ category.name }}
{% endfor %}
# category_detail.html
{{ category.name }}
{% for item in items %}
{{ item.name }}
{% endfor %}
在上面的例子中,我们创建了两个模型类Category和Item,分别表示类别和项目。CategoryListView类继承自ListView类,用于显示所有类别的列表。CategoryDetailView类继承自DetailView类,用于显示特定类别的详细信息,并列出该类别下的所有项目。
在urls.py中,我们定义了两个URL模式,一个用于显示类别列表,另一个用于显示特定类别的详细信息。
在category_list.html模板中,我们使用循环遍历所有类别,并为每个类别创建一个链接,链接到该类别的详细信息页面。
在category_detail.html模板中,我们显示了类别的名称,并使用循环遍历该类别下的所有项目,并显示它们的名称。
请注意,这只是一个示例代码,你可能需要根据你的实际需求进行适当的修改和调整。
下一篇:按类别名称过滤数组