Django:在块外带有标签
Posted
技术标签:
【中文标题】Django:在块外带有标签【英文标题】:Django: with tag outside blocks 【发布时间】:2013-07-13 18:08:30 【问题描述】:如果'with'标签在块外声明,它似乎不起作用:
% extends 'base.html' %
% with my_var=1 %
% block test1 %
my_var
% endblock %
% block test2 %
my_var
% endblock %
% endwith %
上面的模板没有显示任何内容,因为 my_var 没有在这些块中传递。 我该如何克服这个问题?
【问题讨论】:
我不认为block
的原因。您可以通过查看% block test1 %% with my_var1=1 %my_var1% endwith %% endblock %
是否有效来验证吗?
@karthikr 是的,我确定这一点,刚刚测试过。如果可能的话,我会使用 Django 1.3。
我在使用 Django 1.6.1 时遇到了同样的问题。你能解决这个问题吗?
Django 1.10。我也有。在块内移动 % with ... % 使其工作。
【参考方案1】:
我是通过将 Tornado 与 Jinja2 一起使用而来到 Django 的,但由于无法设置 (a) 可以在模板中定义的变量(而不是视图)和 (b) 可以在基本模板中使用这源于。查看来自 django-libs 的一小段四行代码,我能够安装这样的东西,效果很好。下面是一个应该出现在不同块中的标题字符串示例。
settings.py -- 添加到 TEMPLATES (Django 1.10+)
TEMPLATES =
...
builtins = ['mysite...wherever...templatetags',]
mysite.whereever.templatetags.py
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def setvar(context, key, value):
context.dicts[0][key] = value
return ''
base.html
% block settings %
% comment %
Put this at the TOP of the template before
any blocks that use variables.
% endcomment %
% endblock settings %
<html>
<head><title>title</title></head>
<body><h1>My Site: title</h1>
% block body %
% endblock body %
</body></html>
menu.html -- 没有在视图中设置“标题”的模板:
% extends "base.html" %
% block settings %
block.super % comment %optional% endcomment %
% setvar 'title' 'Menu' %
% endblock %
% block body %
<ul><li>Fish</li><li>Steak</li></ul>
% endblock %
现在标题将出现在 HTML 中的两个位置,即使它在派生模板中定义但出现在顶部模板中。
【讨论】:
以上是关于Django:在块外带有标签的主要内容,如果未能解决你的问题,请参考以下文章