10

アンダースコア文字で始まるキーを使用して、dictの要素にアクセスしようとしています。例えば:

my_dict = {"_source": 'xyz'}

Djangoテンプレートでそれらにアクセスしようとしています。明らかに、Djangoテンプレートから下線付きのpython変数にアクセスできないことを認識しています(Pythonではプライベートと見なされるため)が、これは不変オブジェクトが有効なキーであるdictオブジェクトです。

{{my_dict._source}}を使用してDjangoテンプレートで上記のdictにアクセスできないため、Djangoがそれを阻止していると思います。それは正確ですか?

私は、Djangoがアンダースコアで始まる変数で何か正気なことをすることを望んでいます(最初のことはおそらく試行されます)が、アンダースコア付きのプレフィックス変数は無効になるため、属性ルックアップ、メソッド呼び出し、リストインデックスルックアップを行うことを拒否します。しかし、私はすぐに希望を失っています。

ちなみに、誰かがdictを変更することを提案することは知っていますが、これは実際には、ElasticSearchインスタンスでRESTAPIリクエストを実行するときにrawesライブラリによって返されるマルチレベルの辞書です。

4

2 に答える 2

17

ドキュメントには、変数をアンダースコアで開始することはできないと記載されています。

変数名は、任意の文字 (A ~ Z)、任意の数字 (0 ~ 9)、アンダースコア (ただし、アンダースコアで始まってはなりません)、またはドットで構成する必要があります。

ただし、辞書のメソッドを模倣するカスタム テンプレート フィルターを簡単に作成できます。get

@register.filter(name='get')
def get(d, k):
    return d.get(k, None)

{{ my_dict|get:"_my_key" }}
于 2012-12-04T00:08:45.367 に答える