Вложенный шаблон Django включает передачу переменных
Я использую шаблон django index.html для отображения главной страницы. Он включает в себя другой шаблон для создания иконки ссылки. Этот шаблон url_icon.html включает еще один шаблон icon.html. При передаче аргументов по пути вниз я сталкиваюсь с ошибкой. Как ее исправить?
index.html
.
.
.
{% include "url_icon.html" with name="return" url="/" %}
.
.
.
url_icon.html
<a href="{{url}}">{% include "icon.html" with icon={{ name }} %}</a>
icon.html
<img src="/static/images/{{ name }}.png" />
Причина ошибки:
Could not parse the remainder: '{{' from '{{'
Похоже, есть несколько вещей, которые вы можете сделать, чтобы улучшить/исправить это. Решение вопросов #1 и #2 должно решить вашу проблему. Я также добавил предложения по лучшим практикам, которые, вероятно, потребуют рефакторинга (#3, #4).
- Похоже, что вам нужно убрать фигурные скобки из
nameвнутри тега{% include %}. Контекстные переменные можно использовать внутри тегов без дополнительного синтаксиса.
url_icon.html:
{% include "icon.html" with icon=name %}
- icon.html будет иметь доступ к
name, поскольку вы не используете ключевое словоonlyпри обновлении его контекста, поэтому сначала может показаться, что ваш код работает ({% include %} документации). Однако, похоже, что вы намерены обращаться к нему как кicon.
- Используйте переменную
iconвместоname
icon.html:
<img src="/static/images/{{ icon }}.png" />
- Дополнительное предложение: Используйте систему статических файлов Django .
Попробуйте использовать тег {% static %} для вашего значка. Это поможет облегчить развертывание, особенно если вы используете отдельную CDN от вашего веб-сервера. Есть много литературы о том, как настроить статические файлы для Django-проектов в производстве, это большая тема, но вы сможете подойти к ней проще, если с самого начала будете использовать тег {% static %}.
- Дополнительное предложение: Система маршрутизации URL в Django .
Ваш маршрут в index.html жестко закодирован как "/". Django имеет мощную систему ссылок на URL, которую можно использовать. Если вы определили корневой URL / с помощью Django, вы можете ссылаться на него по имени. Docs: {% url %}, а для back-end - reverse().
