Как правильно выводить шаблоны Django

Всем привет, хочу в темплейт index.html вызвать цикл с постами, и в цикл вставить другой темплейт tmpl_article_small.html, потому что там будет миллион разных условий и он будет переиспользоваться.

Как это лучше сделать, пока я понимаю как это сделать через кастомный тег, но правильный ли это выход?

Вывод в index.html

<div class="finallot-other-news">
          {% for post in posts %}
            {% show_small_article(post) %}
          {% endfor %}
 </div>

Файл post.py:

from django import template

register = template.Library()


@register.inclusion_tag('news/tmpl_article_small.html')

def show_small_article(post):

    return {"post": post}

Если я тебя правильно понял, то тебе нужен context processors. Они позволяют получить данные, которые будут доступны во всех шаблонах.

В приложении проекта создай фаил context processors.py. Импортируй туда нужную тебе модель и напиши функцию, которая вовращает данные. Например:

 from .models import Post

 def all_posts(request):
   return {"posts": Post.objects.all()}

Потом идешь в папку с проектом в settings.py и находишь TEMPLATES и прописываешь имя приложения(где фаил context_processors.py).context_processors.название функции.

  TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, "templates")],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
             #ТВОЙ КОНТЕКСТНЫЙ ПРОЦЕССОР
             blog.context_processors.all_posts,
             
             
        ],
    },

Теперь идем в любой html шаблон и получаем список постов по ключу из функции

{{posts}}
Вернуться на верх