Django.template.exceptions.TemplateSyntaxError: Неверный тег блока. Вы забыли зарегистрировать или загрузить этот тег?
У меня есть представление, которое имеет контекстные данные, и оно расширяет base.html, но поскольку я хочу, чтобы контекстные данные отображались во всех шаблонах, которые расширяются из base.html, а не только в представлении с контекстными данными, я делаю пользовательские теги шаблона с контекстом внутри, но получаю ошибку.
просмотр с контекстными данными и без них:
class HomeView(ListView):
model = Product
context_object_name='products'
template_name = 'main/home.html'
paginate_by = 25
class HomeView(ListView):
model = Product
context_object_name='products'
template_name = 'main/home.html'
paginate_by = 25
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
categories = Category.objects.all()
news = News.objects.all()
context.update({
'categories' : categories,
'news' : news,
})
return context
base.html с пользовательским тегом и без него
{% news %}
{% for new in news %}
<p>{{ new.title }}</p>
{% endfor %}
Файл пользовательских тегов templatetags/news.py
from django import template
from support.models import News
register = template.Library()
@register.inclusion_tag('news.html', takes_context=True)
def news(context):
return {
'news': News.objects.order_by("-date_posted")[0:25],
}
Файл пользовательских тегов templatetags/news.html
{% for new in news %}
<p>{{ new.title }}</p>
{% endfor %}
Простая вещь, вы должны load
тег template в шаблоне news.html, который зарегистрирован.
Просто загрузите тег в шаблоне news.html
:
{% load tag_name %} #Add here tag name to load
Примечание: Пожалуйста, убедитесь, что настройки тега шаблона добавлены в файл settings.py
Вам необходимо определить код python, содержащий ваши коды тегов, в переменной TEMPLATES
в settings.py
.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
str(BASE_DIR.joinpath('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',
],
'libraries':{
'tagname': 'appname.news', # your template tag
}
},
},
]