Django: нельзя передать переменную во включенный шаблон? - PullRequest
6 голосов
/ 26 декабря 2010

У меня возникла проблема, когда я хочу использовать шаблон, в том числе и в Django.

Вот реальный пример: Я получил 3 файла:

  • home.html (получит переменную контекста, переданную из Views )
  • base.html (файл шаблона скелета)
  • и header.html (входит в base.html).

Если я поместил приведенный ниже код непосредственно в base.html без включения header.html , переменная {{title}} , переданная из дома, будет правильно называется. Но если я включу header.html в base.html , значение переменной {{title}} не может быть вызвано.

<title>{% block title %}{% endblock %} | {{ SITE_INFO_TITLE }}</title>

Есть ли решение этой проблемы? Спасибо.

Ответы [ 3 ]

10 голосов
/ 06 сентября 2013

Не могли бы вы просто передать переменную в теге {% include %}?Это задокументировано здесь: https://docs.djangoproject.com/en/1.5/ref/templates/builtins/#include

{% include "name_snippet.html" with person="Jane" greeting="Hello" %}
4 голосов
/ 26 декабря 2010

Вы можете использовать Теги включения , чтобы отобразить дополнительный шаблон из шаблона Django. Вы можете дополнительно передать «дочерний» шаблонный шаблон из «родительского» шаблона.

Это немного связано с вашим вариантом использования, но решает вашу проблему. Я склонен использовать его, когда зацикливаю список, чтобы визуализировать каждый элемент с помощью собственного шаблона. Затем я могу повторно использовать этот шаблон в другом месте, не дублируя разметку, если мне нужно отобразить другой элемент того же типа.

3 голосов
/ 26 декабря 2010

Насколько я знаю, блоки и переменные различаются в django. Если вы хотите передать заголовок как переменную контекста, вы должны установить его, используя объявление в base.html, например:

{% include "header.html"%} 

Который в свою очередь содержит:

{% block title %} {{title}} {%endblock%}

Вы также можете установить его в домашних условиях следующим образом.
{% block title%} Домашняя страница {% endblock%} Но я также пытаюсь установить в контексте шаблона. Без заголовка.

def test_view(ctx):
  xa = { "title":"Sommaire"}
  return render_to_response("test.html",xa)

Я думаю, вы также можете увидеть тег шаблона with. Я думаю, что можно установить контекстную переменную, используя этот тег.

...