Здравствуйте. Мне нужна ваша помощь снова.
Я хочу создать архив гороскопов. Для этого я создал категории из 12 месяцев и так же в админке когда я создаю саму статью с гороскопом, то статья привязывается к определенному месяцу(категории). Когда вывожу в шаблоне через for, то у меня выводится только первая статья гороскопа, а остальные которые привязаны к этому месяцу(категории) они не выводятся. Как мне сделать так, чтобы в каждом месяце(категории) выводились все те статьи которые к категории привязаны?
models.py
views.py
templatags
horoscope_order.py
urls.py
horoscope.html
Я хочу создать архив гороскопов. Для этого я создал категории из 12 месяцев и так же в админке когда я создаю саму статью с гороскопом, то статья привязывается к определенному месяцу(категории). Когда вывожу в шаблоне через for, то у меня выводится только первая статья гороскопа, а остальные которые привязаны к этому месяцу(категории) они не выводятся. Как мне сделать так, чтобы в каждом месяце(категории) выводились все те статьи которые к категории привязаны?
models.py
Python:
class Horoscope(models.Model):
title = models.CharField(max_length=150, verbose_name='Заголовок гороскопа')
content = models.TextField(blank=False, verbose_name='Текст гороскопа')
photo = models.ImageField(upload_to='photos_horosсope/%Y/%m/%d/', verbose_name='Картинка гороскопа', blank=True)
slug = models.SlugField(max_length=150, unique=True, verbose_name='Слаг гороскопа')
views = models.IntegerField(default=0, verbose_name='Просмотры')
category_horoscopes = models.ForeignKey('CategoryHoroscopes', verbose_name='Месяц', on_delete=models.PROTECT, related_name='horoscopes') # on_delete=models.PROTECT - защита от удаления статей привязанных к категории.
def get_absolute_url(self):
return reverse('horoscope', kwargs={"slug": self.slug})
def __str__(self):
return self.title
def save(self, *args, **kwargs):
value = self.title
self.slug = slugify(value)
super().save(*args, **kwargs)
class Meta:
verbose_name = 'Гороскоп'
verbose_name_plural = 'Гороскопы'
ordering = ['-title'] # '-created_ad' - посты в обратном порядке. Свежие первые.
class CategoryHoroscopes(models.Model):
title = models.CharField(max_length=150, db_index=True, verbose_name='Категория гороскопа')
slug = models.SlugField(max_length=150, unique=True, verbose_name='Слаг категории')
def get_absolute_url(self):
return reverse('category-horoscopes', kwargs={"slug": self.slug})
def __str__(self):
return self.title
def save(self, *args, **kwargs):
value = self.title
self.slug = slugify(value)
super().save(*args, **kwargs)
class Meta:
verbose_name = 'Категория гороскопа'
verbose_name_plural = 'Категории гороскопов'
ordering = ['title']
views.py
Python:
class HoroscopePage(ListView):
template_name = 'news/horoscope.html'
context_object_name = 'horoscopes_item'
def get_queryset(self):
return Horoscope.objects.all().order_by('pk')[:6]
templatags
horoscope_order.py
Python:
from django import template
from news.models import Horoscope
register = template.Library()
@register.simple_tag(name='horoscope_ordering')
def get_horoscope_articles():
return Horoscope.objects.all().order_by('pk')[6:12]
urls.py
Python:
path('horoscope/<slug>/', HoroscopeDetailView.as_view(), name='horoscope'),
path('category-horoscopes/<slug>/', HoroscopeByCategory.as_view(), name='category-horoscopes'),
path('horoscopes/', HoroscopePage.as_view(), name='horoscopes'),
horoscope.html
HTML:
{% include 'inc/_nav.html' %}
{% load horoscope_order %}
{% horoscope_ordering as horoscopes_item2 %}
{% load last_horoscope %}
{% horoscope_last as horoscope_item3 %}
<body>
<div class="color-main-horoscope">
<div id="col-horoscope">
<div class="popular-horoscope">
<h2>Гороскоп</h2>
</div>
<div class="card mb-3" id="main-card-horoscope">
<div class="card-header" id="cat-views">
<p id="category-detail"> Месяц: <a href="{{ horoscope_item3.category_horoscopes.get_absolute_url }}">{{ horoscope_item3.category_horoscopes.title }}</a></p>
</div>
<div class="card-body-horoscope">
<h5 class="card-title text-center">{{ horoscope_item3.title }}</h5>
<p class="card-text">{{ horoscope_item3.content | safe | linebreaks }}</p>
<div class="container">
<div class="pull-left" id="rt-logo-horoscope">
<img src="{{ horoscope_item3.photo.url }}" alt="" width="700" height="600">
</div>
</div>
</div>
</div>
<div class="popular-horoscope">
<h2>Архив гороскопов</h2>
</div>
<div id="horoscope-flex">
<div class="main-horoscope">
{% for item in horoscopes_item %}
<div class="media-horoscope">
<a href="{% url 'category-horoscopes' item.category_horoscopes.slug %}"><h4>{{ item.category_horoscopes.title }}</h4></a>
<a href="{{ item.get_absolute_url }}"><h5>{{ item.title }}</h5></a>
</div>
{% endfor %}
</div>
<div class="main-horoscope2">
{% for item in horoscopes_item2 %}
<div class="media-horoscope2">
<a href="{% url 'category-horoscopes' item.category_horoscopes.slug %}"><h4>{{ item.category_horoscopes.title }}</h4></a>
<a href="{{ item.get_absolute_url }}"><h5>{{ item.title }}</h5></a>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
<div id="space-5">
</div>
</body>