Как сделать категорию товара видимой в меню на всех страницах в django

html внутри макетов и я делаю расширения на других страницах, все работает нормально, но меню категорий (пришедшее из базы данных) скрыто на некоторых страницах и я могу видеть его только на одной странице Вот мой код :

def produit_list(request):
    produits = Produits.objects.all()
    categories = Category.objects.all()
    context = {
                'produits':produits,
                'categories':categories,
    
            }
    return render(request, 'shop.html', context)


#categories.html
<div class="col-md-4 pt-5">
    <h2 class="h2 text-light border-bottom pb-3 border-light">Categories</h2>
    <ul class="list-unstyled text-light footer-link-list">
    {% for cat in categories %}
            <li><a class="text-decoration-none" href="#">{{cat.name}}</a></li>
    {% endfor %}
    </ul>
</div>

я включаю этот код в файл base.html

Я хочу знать, как загрузить его на весь сайт как меню в нижней части каждой страницы, сейчас я могу видеть его только в shop.html.

Спасибо

вы можете сделать это с помощью настраиваемого контекстного процессора или с помощью настраиваемых тегов шаблонов.

1- пропустить его через пользовательский контекстный процессор

создайте файл пользовательского контекстного процессора и функцию.

# the custom_context.py file

def global_ctx():
   return {
     # any other values ...
     "categories": Category.objects.all(),
   }

добавьте этот файл в ваш settings.py файл в разделе TEMPLATES как

 TEMPLATES = [
     {
         "BACKEND": "django.template.backends.django.DjangoTemplates",
         "DIRS": [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",
                 "App_Name.custom_context.global_ctx",  # Custom Context Processor
             ],
         },
     },
 ]

и все готово, вы можете получить доступ к categories во всех ваших файлах шаблонов.

2- пропустите его через пользовательские теги

под вашим приложением создайте каталог templatetags и создайте в нем файл пользовательских тегов.

# the your_app/templatetags/custom_tag.py file
from django import template

register = template.Library()

@register.simple_tag
def get_categories():
    return Category.objects.all()

затем в вашем html файле сначала загрузите пользовательский тег {% load custom_tag %} затем вы сможете получить к нему доступ. это может помочь вам больше о пользовательских тегах шаблона и фильтрах.

Делать это через контекстный процессор

# Create a context_processors.py in your django app
def produit_list(request):
    produits = Produits.objects.all()
    categories = Category.objects.all()
    context = {
        'produits':produits,
        'categories':categories,
    }
    # Return a dictionary with the data you want to load 
    # on every request call or every page.
    return context

А в настройках:

# ...

TEMPLATES = [
    {
        # ...
        "OPTIONS": {
            "context_processors": [
                # ...
                "your_app.context_processors.produit_list",
                # ...
            ],
        },
    }
]

# ...

Тогда вы сможете вызывать продукты и категории на каждой странице, как вы это делаете в вашем categories.html

Спасибо, я попробую этот ответ

Спасибо, это очень хорошо работает с контекстными_процессорами

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