Реклама

Вывод списка популярных статей на любой странице сайта

TutorialDjangoDjango, templatetags, список популярных статей, Python361

На сайте уже была статья о выводе списка популярных статей за последние 7 дней . Но в том варианте, который использован в данной статье, показано, как сделать вывод на странице со статьями. Но возник вопрос, как быстро внедрять список популярных статей на любую страницу сайта.

У себя я решил эту проблему с использованием собственного тега , который может быть использован в шаблоне Django. То есть, вместо того, чтобы в каждом View на сайте прописывать один и тот же код для получения списка статей или использования одной и той же функции в этих View, я просто сделал отдельный шаблон с уже готовой разметкой для списка популярных статей, в котором используется мой пользовательский тег, которым я забираю список этих статей. Таким образом, нужно только внедрять данный шаблон в нужном месте в шаблоне страницы с помощью тега include.

templatetags

Как уже говорилось, для статей я использовал модуль knowledge. В нём и создадим пользовательский тег. Для этого необходимо создать папку templatetags , а в ней два файла: __init__.py , knowledge_extras.py.

Далее в knowledge_extras.py прописываем выборку списка популярных статей за неделю.

# -*- coding: utf-8 -*-

from django import template
from django.db.models import Sum
from django.utils import timezone

from knowledge.models import ArticleStatistic

register = template.Library()


@register.simple_tag
def get_popular_articles_for_week():

    popular = ArticleStatistic.objects.filter(
        # отфильтровываем записи за последние 7 дней
        date__range=[timezone.now() - timezone.timedelta(7), timezone.now()]
    ).values(
        # Забираем интересующие нас поля, а именно id и заголовок
        # К сожалению забрать объект по внешнему ключу в данном случае не получится
        # Только конкретные поля из объекта
        'article_id', 'article__title', 'article__views',
    ).annotate(
        # Суммируем записи по просмотрам
        sum_views=Sum('views')
    ).order_by(
        # отсортируем записи по убыванию
        '-sum_views')[:5]    # Заберём последние пять записей

    return popular

popular.html

Далее напишем шаблон, где будет применяться этот тег с вёрсткой списка популярных статей за неделю.

{% load knowledge_extras %}
{% get_popular_articles_for_week as POPULAR_ARTICLES %}
{% if POPULAR_ARTICLES %}
    {% load bootstrap3 %}
    <ul class="list-group">
        <li class="list-group-item active"><strong>Популярные публикации за неделю</strong></li>
        {% for article in POPULAR_ARTICLES %}
            <li class="list-group-item">
                <a href="{% url 'post:article' article.article_id %}">{{ article.article__title }}</a>
            </li>
        {% endfor %}
    </ul>
{% endif %}

Использование шаблона

А для того, чтобы использовать данный шаблон, нужно просто добавить его с помощью тега include в то место в шаблоне главной страницы, шаблоне поиска, шаблоне статьи или ином шаблоне, где вы хотите видеть данный список популярных статей.

{% include 'knowledge/popular.html' %}

@EVILEG 5 января 2017 г. 18:47

Реклама

Реклама

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь

Реклама

Реклама