Как правильно выводить шаблоны 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}}