Вложенный шаблон 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 '{{'

django-error

Похоже, есть несколько вещей, которые вы можете сделать, чтобы улучшить/исправить это. Решение вопросов #1 и #2 должно решить вашу проблему. Я также добавил предложения по лучшим практикам, которые, вероятно, потребуют рефакторинга (#3, #4).

  1. Похоже, что вам нужно убрать фигурные скобки из name внутри тега {% include %}. Контекстные переменные можно использовать внутри тегов без дополнительного синтаксиса.

url_icon.html:

{% include "icon.html" with icon=name %}
  1. icon.html будет иметь доступ к name, поскольку вы не используете ключевое слово only при обновлении его контекста, поэтому сначала может показаться, что ваш код работает ({% include %} документации). Однако, похоже, что вы намерены обращаться к нему как к icon.
  • Используйте переменную icon вместо name

icon.html:

<img src="/static/images/{{ icon }}.png" />
  1. Дополнительное предложение: Используйте систему статических файлов Django
  2. .

Попробуйте использовать тег {% static %} для вашего значка. Это поможет облегчить развертывание, особенно если вы используете отдельную CDN от вашего веб-сервера. Есть много литературы о том, как настроить статические файлы для Django-проектов в производстве, это большая тема, но вы сможете подойти к ней проще, если с самого начала будете использовать тег {% static %}.

  1. Дополнительное предложение: Система маршрутизации URL в Django
  2. .

Ваш маршрут в index.html жестко закодирован как "/". Django имеет мощную систему ссылок на URL, которую можно использовать. Если вы определили корневой URL / с помощью Django, вы можете ссылаться на него по имени. Docs: {% url %}, а для back-end - reverse().

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