1

こんにちは私はAppEngine/Pythonを使用して簡単なWebサイトを作成しています。Djangoテンプレートの問題で問題が発生しました。

つまり、「ShortName」を使用して「LongName」にアクセスしたいと思います。

ソースコード:

LongName={"so":"stackoverflow","su":"superuser"}
ShortName=['so','su']

次に、これら2つのパラメーターをテンプレートに渡します。

私が書いたテンプレートには次のようなものがあります。

{% for aname in ShortName %}
{{ aname }} stands for {{ LongName.aname }},
{% endfor %}

出力は次のとおりです。

so stands for, su stands for

エラーは発生しません。LongName.aname動作しません。

何が悪いのかわかりません。

4

2 に答える 2

5

LongName['aname']これはではなくにアクセスしようとしていますLongName[aname]

これを機能させるには、カスタム テンプレート タグ/フィルターを作成する必要がある場合があります。この Django バグ(WONTFIX とマークされています) の実装は単純です。

def get(d, key):
    return d.get(key, '')

register.filter(get)

あなたが使用する

{{ LongName|get:aname }}

アプリに追加した後(そのSOの回答は、GAEでそれを行う方法を示しています)。


渡すことにより、ビューでループする変数を事前に作成することもできます

 # in view
 name_abbrevs = [(k, LongName[k]) for k in ShortName]

 # in template
 {% for short_name, long_name in name_abbrevs %}
     {{ short_name }} stands for {{ long_name }}
 {% endif %}

本当にテンプレート タグを追加したくない場合は、それほど悪くはありません。ファイルを 1 つ作成するだけです。:) -- または追加の変数を渡すと、Vic のアプローチにより、Python ファイルにまったく触れずにこれを行うことができます。彼が言及しているように、これには多くの無意味な繰り返しが含まれますが、小さなリストでは問題なく機能します。

于 2012-04-28T18:02:22.250 に答える