Django:无法将变量传递给包含的模板?

时间:2010-12-26 10:46:30

标签: django templates django-templates

我遇到了一个问题,我想在Django中使用模板。

这是一个真实的例子: 我有3个文件:

  • home.html (将从视图获取上下文变量)
  • base.html (骨架模板文件)
  • header.html (由base.html包含)。

如果我将以下代码直接放在 base.html 中而不包含 header.html ,则 {{title}} 变量从家是正确的。但如果我在 base.html 中加入 header.html ,则无法调用 {{title}} 变量的值。

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

这个问题有解决办法吗?感谢。

3 个答案:

答案 0 :(得分:10)

你能在{% include %}标签内传递一个变量吗?它在此处记录:https://docs.djangoproject.com/en/1.5/ref/templates/builtins/#include

{% include "name_snippet.html" with person="Jane" greeting="Hello" %}

答案 1 :(得分:4)

您可以使用Inclusion Tags从Django模板中呈现其他模板。您还可以从“父”模板传递“子”模板上下文。

它与您的用例有点牵连,但它解决了您的问题。当我循环列表以使用自定义模板呈现每个项目时,我倾向于使用它。然后我可以在其他地方重用该模板,而不需要复制标记,如果我需要渲染另一个相同类型的项目。

答案 2 :(得分:3)

据我所知,django中的块和变量是不同的。 如果要将title作为上下文变量传递,则必须使用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模板标记我认为可以使用此标记设置上下文变量。