如何解决隐秘如何作用于ListView?
这是我的代码, 我使用django v3,并希望将views.py中的类别函数转换为列表类(ListView)以进行分页。 怎么办 非常感谢
urls.py
from django.urls import path from .views import posts_category
urlpatterns = [
path('<slug:slug>/',posts_category,name="posts_category"),]
model.py
class Category(models.Model):
parent = models.ForeignKey('self',blank=True,null=True,related_name='children',on_delete=models.CASCADE)
title = models.CharField(max_length=70,unique=True)
slug = models.SlugField(max_length=90,unique=True)
description = RichTextUploadingField(blank=True,null=True)
image = models.ImageField(blank=True,upload_to="imgs")
def __str__(self):
return self.title
class MPTTMeta:
order_insertion_by = ['title']
views.py
def posts_category(request,slug):
category = Category.objects.all()
post = Posts.objects.filter(category__slug=slug,status="p")
context = {
'category': category,'post': post,}
return render(request,'posts_category.html',context)
解决方法
我不知道在同一页面中显示类别和产品是否是一个好主意(出于性能考虑),但是您可以使用以下代码将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
)之类的内容,并循环浏览以显示您的类别或其他内容的数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。