Почему теги инклюзии не работают в Django?
Я хочу использовать теги включения для отображения боковой панели, но ничего не отображается.
templatetags/sidebar_tags.py
from ..models import Post
from django import template
register = template.Library()
@register.inclusion_tag('blog/include/post-category.html')
def post_category():
return {'posts': Post.objects.all()}
post-category.html
<div class="single-sidebar-widget post-category-widget">
<h4 class="category-title">Post Categories</h4>
<ul class="cat-list">
{% for category in posts.categories.all %}
<li>
<a href="#" class="d-flex justify-content-between">
<p>{{ category.name }}</p>
<p>37</p>
</a>
</li>
{% endfor %}
</ul>
</div>
home.html
{% load sidebar_tags %}
{% post_category %}
Я думаю, что код в порядке, но я не знаю, почему он работает
Единственная причина, по которой он не может появиться - зарегистрированный тег не видит шаблон. btw. Не импортируйте посты в тег. Вы можете добавить "objests_list" в контекст, а в теге использовать контекст шаблона. А для стандартного просмотра списка django делает это автоматически.
@register.inclusion_tag('blog/include/post-category.html', takes_context=True)
def post_category(context):
return {'posts': context['objects_list']}
Но если в данном случае вы хотите вывести список объектов, то тег inclusion вообще не нужен:
в файле home.html:
{% load sidebar_tags %}
{% include 'blog/include/post-category.html' with posts=objects_list %}