ブロックタグと同様に機能するカスタムタグを作成しました:
@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
タグは、文字列または変数の引数を受け入れます。公式ドキュメントに従って作成しました。
タグは文字列で問題なく動作します。変数を使用する場合:
{% dash page_title %}
<!-- blablabla -->
{% enddash %}
VariableDoesNotExist
エラーが発生します。しかし、変数をテンプレートで直接使用すると、変数は正しく展開されます。
私はDjango 1.5.5を使用しています(そして私はそれでロックされています...)