Evgenii Legotckoi
Evgenii LegotckoiҚаң. 5, 2017, 7:47 Т.Ж.

Django - Lesson 016. Сайттың кез келген бетінде танымал мақалалар тізімін көрсету

Сайтта соңғы 7 күндегі танымал мақалалар тізімі көрсету туралы мақала бұрыннан бар еді. Бірақ осы мақалада қолданылған нұсқада мақалалар бар бетте қорытынды жасау жолын көрсетеді. Бірақ сайттың кез келген бетіне танымал мақалалар тізімін қалай тез ендіру туралы сұрақ туындады.

Үйде мен бұл мәселені Django үлгісінде қолдануға болатын custom tag арқылы шештім. Яғни, мақалалар тізімін алу немесе осы Көріністерде бірдей функцияны пайдалану үшін сайттағы әрбір Көрініске бірдей кодты жазудың орнына, мен жай ғана өзімді пайдаланатын танымал мақалалар тізімі үшін дайын белгілеулері бар бөлек үлгі жасадым. Мен осы мақалалардың тізімін алатын теңшелетін тег. Осылайша, include. тегін пайдаланып, осы үлгіні бет үлгісінің дұрыс орнына ендіру керек.


үлгі тегтері

Жоғарыда айтылғандай, мақалалар үшін білім. модулін пайдаландым.Онда теңшелетін тег жасайық. Ол үшін 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

танымал.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 'knowledge/popular.html' %}

Django үшін Timeweb хостының VDS-сервері ұсынамын.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

АЗ
  • Қаң. 25, 2017, 5:03 Т.Ж.

Евгений, день добрый. За что в вашем конкретном примере отвечает __init__.py?

Evgenii Legotckoi
  • Қаң. 25, 2017, 5:14 Т.Ж.

Андрей, добрый день.
Данный файл отвечает за то, чтобы каталог templatetags и его содержимое рассматривались в качестве отдельного пакета. Это указание по разработке из официальной документации Django.

ИМ
  • Қаң. 31, 2018, 5:59 Т.Қ.

У меня только так заработало.

def get_popular_movies_for_week():

    popular = MovieStatistic.objects.filter(
        date__range=[timezone.now() - timezone.timedelta(7), timezone.now()]
    ).values(
        'movie_id', 'movie__name'
    ).annotate(
        views=Sum('views')
    ).order_by(
        '-views')[:5]

    return popular
Спасибо за статью.

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
m
  • molni99
  • Қаз. 26, 2024, 1:29 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:20ұпай,
  • Бағалау ұпайлары-10
Соңғы пікірлер
i
innorwallҚар. 13, 2024, 8:09 Т.Қ.
C++ файлдарының ішінде CMakeLists.txt ішінде жарияланған айнымалы мәндерді пайдалану where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
i
innorwallҚар. 11, 2024, 10:12 Т.Қ.
Django - Оқулық 055. Автоматты толтыру өрісі функциясын қалай жазу керек Freckles because of several brand names retin a, atralin buy generic priligy
i
innorwallҚар. 11, 2024, 6:23 Т.Қ.
QML - Сабақ 035. C++ қолданбай QML тілінде сандарды пайдалану priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
i
innorwallҚар. 11, 2024, 3:50 Т.Қ.
Qt/C++ - 052-сабақ. Qt аудио ойнатқышын AIMP стилінде теңшеу It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
i
innorwallҚар. 11, 2024, 2:19 Т.Қ.
Үйінді сұрыптау алгоритмі The role of raloxifene in preventing breast cancer priligy precio
Енді форумда талқылаңыз
i
innorwallҚар. 13, 2024, 6:52 Т.Қ.
добавить qlineseries в функции PMID 35774217 Free PMC article priligy cvs
i
innorwallҚар. 11, 2024, 10:55 Т.Ж.
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Бізді әлеуметтік желілерде бақылаңыз