Python Django:如何从页面上的类别中筛选和显示帖子
我是Django新手,已经构建了一个包含帖子的简单应用程序。我想在一个页面上显示与特定类别关联的帖子。我在网上做了不少研究,但似乎没能奏效。我认为问题出在我的观点上 我猜CategoryListView中的get_queryset函数有问题Python Django:如何从页面上的类别中筛选和显示帖子,python,django,Python,Django,我是Django新手,已经构建了一个包含帖子的简单应用程序。我想在一个页面上显示与特定类别关联的帖子。我在网上做了不少研究,但似乎没能奏效。我认为问题出在我的观点上 我猜CategoryListView中的get_queryset函数有问题 ''' models.py ''' from django.db import models class Post(models.Model): title = models.CharField(max_length=100) cont
'''
models.py
'''
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
category = models.ForeignKey(
'Category',
on_delete=models.SET_NULL,
null=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
class Category(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=150, unique=True)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('post-category', kwargs={'pk': self.pk})
'''
views.py
'''
from django.views.generic import ListView
from .models import Post, Category
class CategoryListView(ListView):
model = Post
template_name = 'posts/post_category.html'
def get_queryset(self):
category = get_object_or_404(Category, id=self.kwargs.get('category__name'))
return Posts.objects.filter(category_name=category)
'''
urls.py
'''
from .views import CategoryListView
urlpatterns = [
# urlpatterns for other pages left out for better readability
CategoryListView.as_view(), name='post-category')
]
代码给我一个404,并显示没有类别与我的查询匹配的消息。该函数应返回如下内容:
class CategoryListView(ListView):
# ...
def get_queryset(self):
return Post.objects.filter(category_id=self.kwargs.get('pk'))
也就是说,如果要显示有关类别的信息,最好将其设置为a,然后反向查询关系,如:
class CategoryDetailView(DetailView):
model = Category
context_object_name = 'category'
template_name = 'posts/post_category.html'
class CategoryDetailView(详细视图):
型号=类别
上下文\对象\名称='category'
模板名称='posts/post\u category.html'
在模板中,可以使用以下工具渲染数据:
Category name: {{ category.name }}
{% for post in category.post_set.all %}
post: {{ post.title }}
{% endfor %}
类别名称:{{Category.name}
{category.post_set.all%}
帖子:{{post.title}
{%endfor%}
该函数应返回如下内容:
class CategoryListView(ListView):
# ...
def get_queryset(self):
return Post.objects.filter(category_id=self.kwargs.get('pk'))
也就是说,如果要显示有关类别的信息,最好将其设置为a,然后反向查询关系,如:
class CategoryDetailView(DetailView):
model = Category
context_object_name = 'category'
template_name = 'posts/post_category.html'
class CategoryDetailView(详细视图):
型号=类别
上下文\对象\名称='category'
模板名称='posts/post\u category.html'
在模板中,可以使用以下工具渲染数据:
Category name: {{ category.name }}
{% for post in category.post_set.all %}
post: {{ post.title }}
{% endfor %}
类别名称:{{Category.name}
{category.post_set.all%}
帖子:{{post.title}
{%endfor%}
这是可行的,但是我如何颠倒顺序,总是先显示最新的帖子呢
Category name: {{ category.name }}
{% for post in category.post_set.all %}
post: {{ post.title }}
{% endfor %}
这是可行的,但是我如何颠倒顺序,总是先显示最新的帖子呢
Category name: {{ category.name }}
{% for post in category.post_set.all %}
post: {{ post.title }}
{% endfor %}
urlpatterns
似乎不完整?categorie->categoryTheurlpatterns
似乎不完整?categorie->categoryThanks等待您的回答!这是否意味着在尝试导航到该站点时,我必须转到[first_part_of_url]/category/category_id而不是[first_part of_url]/category/category_name?@codecodecode:yourreturn reverse('post-category',kwargs={pk self.pk})
建议您导航到rooturl/category/123
,因此,对于123
类别的pk
。我明白了,再次感谢你的帮助——它解决了问题:)谢谢你的回答!这是否意味着在尝试导航到该站点时,我必须转到[first_part_of_url]/category/category_id而不是[first_part of_url]/category/category_name?@codecodecode:yourreturn reverse('post-category',kwargs={pk self.pk})
建议您导航到rooturl/category/123
,因此,对于123
类别的pk
。你可以用slug来代替。我明白了,再次感谢你的帮助–它解决了问题:)对不起,我自己解决了,在模型类Meta:ordering=['-id']很好。这似乎是一个新问题?对不起,我自己解决了,在模型类Meta:ordering=['-id']很好。这似乎是一个新问题?