Как сделать категорию товара видимой в меню на всех страницах в 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
Спасибо, я попробую этот ответ
Спасибо, это очень хорошо работает с контекстными_процессорами