Я хочу отобразить список категории на главной (базовой) странице. (mysite здесь. http://jgahn.pythonanywhere.com/)
Когда я щелкнул по категории «Химия», мне потребовался список сообщений с категорией «Химия» и список отображения категории (правая сторона, голубой цвет, химия и физика). Это моя проблема, список категорий отображается только при доступе к какой-либо категории.
Я хочу отображать всегда без доступа в категории (например, на боковой панели).
Большое спасибо за вашу помощь заранее!
Вот мой view.py
from .models import Post, Comment, Category
def list_of_post_by_category(request, category_slug):
categories = Category.objects.all()
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
posts = posts.filter(category=category)
template = 'myblog/list_of_post_by_category.html'
context = {'categories': categories, 'posts': posts, 'category': category,}
return render(request, template, context)
Это моя главная страница. html
<p class="taglist"><a href="{% url 'list_of_post_by_category' category.slug %}">{{ category }}</a></p>
{% endfor %}
list_of_post_by_category. html
{% extends 'myblog/main_page.html' %}
{% block content %}
<h4><span style="color: #ab4a67; font-weight: bold;">{{category.name}}</span> category</h4>
<hr>
<!--<button class="btn-tag">{{ category.name }}</button>-->
{% for post in posts %}
<div class="list">
<h6><a href="{% url 'post_detail' pk=post.pk %}" style="text-decoration:none;"> > {{ post.title }}</a>
<span class="small">{{ post.published_date|date }} {% if user.is_superuser %} {% if post.comments.count >= 1 %}
{{ post.comments.count }} Comments {% endif %} {% endif %}
<button class="btn-tag">{{ tag }}</button>
</span>
</h6>
</div>
{% endfor %}
{% endblock %}
models.py
class Category(models.Model):
name = models.CharField(max_length=250, null=True)
slug = models.SlugField(max_length=250, unique=True, null=True)
class Meta:
ordering = ('name',) # abc ordering
verbose_name = 'category'
verbose_name_plural = 'categories'
def get_absoulte_url(self):
return reverse('list_of_post_by_category', args=[self.slug])
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=200)
category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)
...
urls.py
...
path('category/<category_slug>/', views.list_of_post_by_category, name="list_of_post_by_category"),
...