В файле views.py ### category_posts = Post.objects.filter(category = cat) ### RETURNS AN EMPTY QUERY SET
Я создаю приложение для блога на django и столкнулся с необычной проблемой. Я не могу отфильтровать и отобразить записи блога по категориям. Пожалуйста, приведите мой код ниже. Заранее спасибо.
MODELS.py
Это модель, которую я создал для статьи в блоге.
class Post(models.Model):
title = models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
body = models.TextField()
post_date = models.DateField(auto_now_add=True)
category = models.CharField(max_length=255, default="uncategorized")
def __str__(self):
return self.title + ' | ' + str(self.author)
def get_absolute_url(self):
#return reverse('article-detail', args=(str(self.id)))
return reverse('homepage')
VIEWS.py
Вот представление, которое я создал для категории постов блога.
def CategoryView(request,cats):
category_posts = Post.objects.filter(author= 'apaar')
return render(request,'categories.html',{'cat':cat,'category_posts':category_posts})
URLS.py
Файл urls.py.
path('category/<str:cat>/', CategoryView, name = 'category'),
CATEGORIES.html
Это будет последняя страница отображения, где category_posts отображается как пустой queryset. Цикл for не может быть запущен, потому что category_posts является пустым набором запросов.
{% extends 'base.html' %}
{% load static %}
{% block content %}
<h1>Categories</h1>
<ul>
{% for posts in category_posts %}
<li>
<div class="category"><a href="{% url 'category' post.category|slugify %}">{{ post.category }}</a></div>
<a href="{% url 'article-detail' post.pk %}"><h3><b>{{ post.title }} </b></h3>
<p class=card-date> <big>{{ post.author }}</big><small> -{{ post.post_date }} </small> </p>
<p class="excerpt-text">{{ post.body | slice:"100" |safe}}</p>
<div class="article-thumbnail">
<img src="{% static "images/bg.png" %}" alt="article-thumbnail" >
<div class="overlay"></a>
</li>
{% endfor %}
{% endblock %}
Насколько я понимаю, вы хотите сделать следующее:
def CategoryView(request,cat):
category_posts = Post.objects.filter(category=cat)
return render(request,'categories.html',{'category_posts':category_posts})
Используйте cat в качестве параметра, поскольку вы используете <str:cat> в urls.py, иначе вы можете получить ошибку "Unexpected parameter".
Вы должны фильтровать по category, а не по author. Ваш вопрос корректен, но ваш код не корректен.
Вам не нужно передавать cat varibale в контексте, так как любые сообщения будут содержать его в себе.
Принимая предложения @Willem Van Onsem и @Roham:
{% for post in category_posts %}
# ...
<div class="category"><a href="{% url 'category' post.category %}">{{ post.category }}</a></div>
Если вы хотите использовать слизни, возможно, проверьте models.SlugField.