Die Seite hatte bereits einen Artikel über das Anzeigen einer Liste beliebter Artikel der letzten 7 Tage . Aber in der Version, die in diesem Artikel verwendet wird, zeigt es, wie man eine Schlussfolgerung auf der Seite mit Artikeln zieht. Es stellte sich jedoch die Frage, wie man schnell eine Liste beliebter Artikel auf einer beliebigen Seite der Website einbetten kann.
Zu Hause habe ich dieses Problem mit benutzerdefiniertes Tag gelöst, das in einer Django-Vorlage verwendet werden kann. Das heißt, anstatt denselben Code in jede Ansicht auf der Website zu schreiben, um eine Liste von Artikeln zu erhalten, oder dieselbe Funktion in diesen Ansichten zu verwenden, habe ich einfach eine separate Vorlage mit vorgefertigtem Markup für die Liste beliebter Artikel erstellt, die meine verwendet benutzerdefiniertes Tag, mit dem ich die Liste dieser Artikel nehme. Sie müssen diese Vorlage also nur an der richtigen Stelle in die Seitenvorlage mit dem include. -Tag einbetten.
Vorlagentags
Wie bereits erwähnt, habe ich für die Artikel das Modul knowledge. verwendet, in dem wir ein benutzerdefiniertes Tag erstellen. Dazu müssen Sie einen Ordner templatetags erstellen, in dem sich zwei Dateien befinden: init .py , knowledge_extras.py.
Als nächstes schreiben wir in knowledge_extras.py eine Auswahl der Liste beliebter Artikel für die Woche vor.
# -*- 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
beliebt.html
Als Nächstes schreiben wir eine Vorlage, in der dieses Tag mit dem Layout der Liste beliebter Artikel für die Woche verwendet wird.
{% 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 %}
Verwenden einer Vorlage
Und um diese Vorlage zu verwenden, müssen Sie sie nur mit dem include-Tag an der Stelle in der Hauptseitenvorlage, Suchvorlage, Artikelvorlage oder einer anderen Vorlage hinzufügen, an der Sie diese Liste beliebter Artikel sehen möchten.
{% include 'knowledge/popular.html' %}
Für Django empfehle ich Timeweb-Hoster VDS-Server .
Евгений, день добрый. За что в вашем конкретном примере отвечает __init__.py?
Андрей, добрый день.
Данный файл отвечает за то, чтобы каталог templatetags и его содержимое рассматривались в качестве отдельного пакета. Это указание по разработке из официальной документации Django.
У меня только так заработало.