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

            }
        },
    },
]
Вернуться на верх