Задать вопрос
@MrDoSSSS

Как правильно объявить пользовательский тег в Django?

Доброй день!

Объявил пользовательский тег в джанге, но при использовании ничего не происходит. Ничего не выводится, но и ошибок тоже нет. Как правильно объявлять пользовательские теги?

# app/templatetags/extratags.py

from django import template
from app.models import Product

register = template.Library()

@register.simple_tag
def get_lenta_elem():
    items = Product.objects.all()
    return items


{% load extratags %}
<div class="lenta-elem-container">
    {% for elem in get_lenta_elem %}
    <div class="lenta-elem">
        <img src="{{ elem.image.url }}" alt="{{elem.name}}">
    </div>
    {% endfor %}
</div>
  • Вопрос задан
  • 594 просмотра
Подписаться 1 Оценить 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
@ATNC
Full-stack web\python developer
Для того, чтобы сделать тег доступным во всех вьюхах, можно добавить его в сетинги темплейтов.
settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
           'builtins': 'app.templatetags.extratags' # <<<<<<<<<<<<<<<
        },
    },
]

Но для решение даной задачи лучше подойдет глобальный контекст.
global_context.py
def get_lenta_elem(request):
    items = Product.objects.all()
    return  {'items': items }

и в settings.py добавь функцию в глобальный контекст
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
                # custom context processor
                'путь_к_файлу.навание_метода' # <<<<<<<<<<<<<
            ],
        },
    },
]

После этого переменная items будет доступна во всех вьюхах.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы