【问题标题】:django templates: {% with %} variables blank inside of {% block %} within the {% with %}django 模板:{% with %} 变量在 {% with %} 内的 {% block %} 内为空白
【发布时间】:2015-07-13 18:12:19
【问题描述】:

编辑:我已将测试用例重写为绝对最小: 文件'test.html':

{% extends "testbase.html" %}
{% with greeting="Hi" %}
  {% block content %} {{ greeting }} {% endblock %}
{% endwith %}

文件'testbase.html':

<html>
  <body>
    {% block content %} {% endblock %}
  </body>
</html>

这会在渲染 test.html 时产生以下 HTML 输出:

<html>
  <body>

  </body>
</html>

withblock content 的嵌套颠倒,with 在里面时,就会渲染“Hi”。我的模板有问题吗?什么样的问题会导致这种情况?怎么去诊断呢?我在 python Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32

上运行 Django 1.6.1

【问题讨论】:

  • 在 Django 1.7 上为我工作。您确定您的模板中没有其他错误吗?
  • 嗯,我使用的是 Django 1.6.1,页面上的其他所有内容都正确显示,什么样的问题会导致这种症状?
  • 它甚至可以在 Django 1.4.21 上运行,所以我认为这不是问题 :)
  • 好吧,我想我被困住了。目测代码,它看起来不错。有什么方法可以让 Django 模板处理器在非常详细的模式下运行,以便尝试诊断这个问题?
  • 我将示例重写为具有相同结果的完整最小示例...非常感谢您的建议!

标签: django django-templates


【解决方案1】:

从一个 django-users 的问题来看,它看起来不应该那样工作,就像我的一样(下)。基本上,似乎子模板块内容是在父模板的上下文中评估的。如果我将with语句放在父模板中,将{{greeting}}放在子块内容中,就会出现“Hi”。

我认为您所描述的与 {% 特别带有 %} 标签。你在这里处理一个子模板 -- 以 {% extends %} 标签开头的标签。放置在子模板中 {% block %} 标记之外的任何内容都不会对渲染产生任何影响 模板。子模板只是提供要覆盖的块内容 父模板中指定的内容,因此所有内容都在 子模板必须包含在 {% block %} 标签内。 (如果不是 在 {% block %} 中指定,它应该放在父级的哪里 模板?)见:

http://docs.djangoproject.com/en/dev/topics/templates/#id1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多