Параметр only у include в Django
По умолчанию во вложенный шаблон попадают все переменные родительского шаблона. Иногда это не нужно: подключаемый блок должен видеть только свои данные.
Пусть из представления приходит несколько переменных:
def page(request):
return render(request, 'page.html', {
'products': ['a', 'b', 'c'],
'title': 'shop',
'user': 'john',
})
Если подключить шаблон просто так,
в products.html будут доступны
и products, и title,
и user:
{% include 'products.html' %}
Чтобы ограничить набор переменных,
используют параметр only.
Тогда во вложенный шаблон попадут
только те данные, которые указаны
в with.
Давайте передадим только список товаров:
{% include 'products.html' with products=products only %}
В products.html теперь есть
только products. Переменных
title и user там уже нет:
<ul>
{% for product in products %}
<li>{{ product }}</li>
{% endfor %}
</ul>
В браузере отобразится:
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
Пусть из представления в шаблон передается следующее:
context = {
'products': ['a', 'b', 'c'],
'title': 'shop',
}
Передайте в подключаемый шаблон
только переменную products
с использованием only.
Пусть из представления в шаблон передается следующее:
context = {
'items': ['a', 'b'],
'user': 'john',
}
Подключите шаблон через
include и передайте
только items.