1 回答
TA贡献1789条经验 获得超10个赞
我不知道在同一页面中显示类别和产品是否是个好主意(从性能的角度来看),但您可以使用以下代码将 FBV 转换为 CBV:
from django.views.generic import ListView
class PostCategoryView(ListView):
template_name = 'posts_category.html'
def get_queryset(self):
slug = self.kwargs.get('slug')
return Posts.objects.filter(category__slug=slug, status="p")
def get_context_data(self, **kwargs):
context = super().get_context_data()
context['categories'] = Category.objects.all()
return context
并将您的更改urls为:
from django.urls import path
from .views import PostCategoryView
urlpatterns = [
path('<slug:slug>/', PostCategoryView.as_view(), name="posts_category"),
]
最后,您可以像下面的代码一样在模板中使用上下文数据:
{% for obj in object_list %}
{{ obj.id }} - {{ obj.name }}</a><br>
{% endfor %}
请注意,这object_list是您的 Post 对象的列表,您应该更改obj.name为 Post 模型的其他字段。最后,您可以使用类似的东西object_list(这里我们使用categories)并循环遍历它以显示您的类别或其他内容的数据。
添加回答
举报