Настройте теги шаблона в Django для фильтрации Featured_posts в блоге.

Я понял подсказку из этого сообщения Настройка тегов в Django для фильтрации сообщений в модели Post

Я создал тег шаблона, но не знаю, как использовать его в своем html. У меня есть home.html, где я хочу показать три избранных сообщения. Я ищу что-то вроде {% для сообщения в Featured_post %}, а затем показываю подробности сообщения.

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

Что я пытаюсь сделать, так это создать тег шаблона, как показано в

from django import template


register = template.Library()


@register.inclusion_tag('featured_posts.html')
def featured_posts(count=3):
    if Post.is_featured:
        featured_posts = Post.published.order_by('-publish')[:count]

    return {'featured_posts': featured_posts}

Проблема, с которой я столкнулся, заключается в том, что я не могу импортировать модель Post из модели. Моя структура каталогов примерно такая: - У меня есть приложение с именем posts. Внутри этого у меня есть модуль models.py и templatetags, а внутри тега шаблона у меня есть blog_tags.py.

Я не мог сделать относительный импорт.

А затем создал новую страницу Featured_posts.html, как показано ниже:

<ul>
    {% for post in featured_posts %}
        <li>{{ post.title }} </li>
    {% endfor %}
</ul>

Теперь я хочу использовать его в своем home.html. Как я могу его использовать?

Изменить: - Как упоминалось выше, я мог загрузить модели, как показано ниже: -

from posts.models import Post

person Udit Hari Vashisht    schedule 14.08.2018    source источник
comment
Так реализован тег включения. Так же, как данная ссылка описывает: функция, шаблон, затем вызовите свою функцию в родительском/главном шаблоне. Цикл {% for %} будет внутри вашего вторичного шаблона.   -  person Ivan Starostin    schedule 14.08.2018
comment
Я новичок, я только что отредактировал свой вопрос о том, как я пытаюсь это сделать. Не могли бы вы подсказать мне, как это сделать?   -  person Udit Hari Vashisht    schedule 14.08.2018
comment
У вас та же ошибка в функции тега, что и в ОП по ссылке. Взгляните на ответ там. `featured_posts.html` подойдет.   -  person Ivan Starostin    schedule 14.08.2018
comment
Ах да... Я исправил это. и я делаю это в своем home.html {% load blog_tags %} {% for post in featured_posts %}{{ post.title }}{% endfor %} Тем не менее, я ничего не получаю в своем home.html. Одна из возможных причин, как я уже упоминал, заключается в том, что я не включил класс модели в тег. (Прочитайте выше проблему, с которой я столкнулся при этом) @IvanStarostin   -  person Udit Hari Vashisht    schedule 14.08.2018


Ответы (1)


home.html

{% load blog_tags %} 
{% featured_posts %}

Назовите свой тег. Вот и все.

or

{% featured_posts count=15 %}

Обратите внимание, featured_posts здесь не список сообщений (который повторяется в цикле for) из контекста, а имя функции: def featured_posts(count=3). В вашем коде они имеют одно и то же имя, и, вероятно, это вас немного смутило.

person Ivan Starostin    schedule 14.08.2018