@PiggyPig

Как вывести статью только один раз?

В шаблоне нужно вывести некоторое количество статей. Но проблема в том, что статьи могут относится к нескольким категориям и при таком выводе

{% for article_page in article_pages %}
    ...
    {% for article in article_page.categories.all %}
        <a href="{% url 'articles' article.slug article_page.slug %}">
    {% endfor %}
    ...
{% endfor %}


получаем одну статью, но с несколькими разными ссылками. Мне такое счастье не нужно. Поэтому надо как-то вывести эту статью с одной любой относящейся к ней категорией в ссылке.
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
@PiggyPig Автор вопроса
В конце концов нашелся ответ. Выше представленный элемент шаблона преобразовал в такой вид:

{% for article_page in article_pages %}
    ...
    <a href="{% url 'articles' article_page.categories.first.slug article_page.slug %}">
    ...
{% endfor %}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rorc
Удалить через шаблонизатор дубли здесь будет затруднительно, если это действительно нужно то лучше использовать обработку на этапе views, удалив дубли или выводя статьи через шаблонный тег, в коде которого проверять на совпадения.

Архитектурная ошибка уже допущена на этапе проектирования url. {% url 'articles' article.slug article_page.slug %}. В любом случае будут дубли, т.к. адрес url будет /cat1/article /cat2/article/

Способов избавиться от них два:
1) Статьи отдельно, категории отдельно. /url/catalog/name /url/article/name
В этом случае даже если выводится одна статья несколько раз, url уникален
2) Одна главная категория, url на основании этой категории. Остальные категории второстепенные, отдельным списком.

Для чего два вложенных цикла сделали тоже не очень понятно, обычно один цикл и url на основе запроса данных из таблицы по ключу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы