0

ブロックタグと同様に機能するカスタムタグを作成しました:

@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を使用しています(そして私はそれでロックされています...)

4

2 に答える 2

0

今はうまくいくようです。コードをまったく変更していません。おそらくこれは、私が使用しているフレームワーク (Splunk) が原因です。

于 2015-06-24T16:02:33.513 に答える
0

VariableDoesNotExist がインラインでスローされます。self.title.resolve(context)これは、インスタンス化時template.Variable(title)にタイトルが現在の既存の変数に対応していないためcontextです。それはあなたの例titleではそうではないことを意味するかもしれません"page_title"。小切手。

于 2015-06-23T14:57:00.067 に答える