Html + Django: Отображать новости по дате и категории
Разрабатываю сайт на Django и столкнулся со следующей задачей: нужно фильтровать трансляции по дате и категории.
Реализовал выбор категории, однако с датой возникли проблемы.
- Во первых мне нужно отправлять отправлять запрос сразу с двумя параметрами.
- Календарь представляет собой input, и я не до конца понимаю как мне связать переключение между категориями которые являются ссылка, и input в виде календаря.
Разметка и шаблонизатор выглядят следующим образом:
{% csrf_token %}
<button
class="translations__date-choose-btn_type_yesterday btn-no-style translations__date-choose-font-style">
Вчера
</button>
<button
class="translations__date-choose-btn_type_today btn-no-style translations__date-choose-font-style translations__date-choose_active">
Сегодня
</button>
<button
class="translations__date-choose-btn_type_tomorrow btn-no-style translations__date-choose-font-style">
Завтра
</button>
<input type="date" name="calendar"
class="translations__date-choose-btn_type_calendar btn-no-style translations__date-choose-font-style">
</form>
<form class="translations__sport-choose" method="post" action="">
{% csrf_token %}
<a href="{% url 'index' %}" class="translations__sport-chose-btn_type_all btn-no-style translations__sport-choose-btn-font-style translations__sport-choose_active">
Все
</a>
{% for i in category %}
{% if category_name == i.name %}
<a href="{% url 'cat' i.name %}"
class="translations__sport-chose-btn_type_all btn-no-style translations__sport-choose-btn-font-style translations__sport-choose_active">{{ i.name }}</a>
{% else %}
<a href="{% url 'cat' i.name %}"
class="">{{ i.name }}</a>
{% endif %}
{% endfor %}
</form>
views.py:
def index(request):
category = Category.objects.all()
translations = Translation.objects.all()
return render(request, 'index.html', {"category": category, "translations": translations})
def index_category(request, category_name):
category = Category.objects.all()
translations = Translation.objects.all()
return render(request, 'category.html', {"category": category, "translations": translations, "category_name": category_name})
Если вопрос подобного формата уже где то задавался, буду рад если сможете поделиться ссылкой, сам я к сожалению не нашел.
надо в models.py
сделать поля с датой в нужной тебе модели.
Например:
date = models.DateTimeField(default=timezone.now)
И потом добавить в класс Meta
сортировку в обратном порядке
class Meta:
ordering = ('-date',)
А по поводу сортировки по категориям, то в models
, добавь ForigenKey
на категорию, а потом в viws.py
:
category = None
categories = GameCategory.objects.all()
all_products = Product.objects.filter(available=True)
if category_slug:
category = get_object_or_404(GameCategory, slug=category_slug)
all_products = all_products.filter(category=category)
Нашел ответ на своей вопрос и хочу поделиться им. Что бы реализовать двойную фильтрацию на чистом django нужно задать кнопкам значение категорий + дату (в моем случае это выглядело например "Сегодня_Футбол"). Далее на беке делаем split и фильтруем полученные данные.