Python Django变量直接在模板中替换,但不在自定义标记中替换
我创建了一个自定义标记,其工作原理类似于块标记:Python Django变量直接在模板中替换,但不在自定义标记中替换,python,django,django-templates,django-custom-tags,Python,Django,Django Templates,Django Custom Tags,我创建了一个自定义标记,其工作原理类似于块标记: @register.tag def dash(parser, token): nodelist = parser.parse(('enddash',)) parser.delete_first_token() args = token.split_contents() title = args[1] return DashNode(nodelist, title) class DashNode(te
@register.tag
def dash(parser, token):
nodelist = parser.parse(('enddash',))
parser.delete_first_token()
args = token.split_contents()
title = args[1]
return DashNode(nodelist, title)
class DashNode(template.Node):
def __init__(self, nodelist, title):
self.nodelist = nodelist
if title[0] in ('"', "'") and title[0] == title[-1]:
self.title = title[1:-1]
else:
self.title = template.Variable(title)
self.tpl = """
<div class="dashboard-body container-fluid main-section-body view-mode" data-role="main">
<div class="dashboard-header clearfix">
<h2>{title}</h2>
</div>
{content}
</div>"""
def render(self, context):
try:
title = self.title.resolve(context)
except AttributeError:
title = self.title
output = self.nodelist.render(context)
new_output = self.tpl.format(content=output, title=title)
return new_output
@register.tag
def dash(解析器、令牌):
nodelist=parser.parse(('enddash',))
parser.delete_first_token()
args=token.split_contents()
title=args[1]
返回DashNode(节点列表,标题)
类DashNode(template.Node):
定义初始化(self、节点列表、标题):
self.nodelist=节点列表
如果(“,“”)中的标题[0]和标题[0]==标题[-1]:
self.title=标题[1:-1]
其他:
self.title=template.Variable(title)
self.tpl=“”
{title}
{content}
"""
def呈现(自身、上下文):
尝试:
title=self.title.resolve(上下文)
除属性错误外:
title=self.title
输出=self.nodelist.render(上下文)
新的输出=self.tpl.format(内容=输出,标题=标题)
返回新的输出
标记接受一个参数,可以是字符串或变量
标记与字符串一起工作没有问题。如果我使用变量:
{% dash page_title %}
<!-- blablabla -->
{% enddash %}
{%dash页面\标题%}
{%enddash%}
引发了variabledesnotexist
错误。但是如果我在模板中直接使用该变量,则该变量已正确展开
我使用的是Django 1.5.5(我被它锁定了…variabledeodesnotexist被抛出到行
self.title.resolve(context)
中,因为实例化模板.Variable(title)时
,title与当前上下文中的现有变量不对应。这可能意味着在您的示例中title
不是“page\u title”
。请检查。现在似乎可以工作。我根本没有更改代码。这可能是由于我使用的框架(Splunk)造成的.标题
是页面的标题
。