36

URL 短縮サービスを使用しています (Werkzeug の Shortly デモ アプリに基づいています)。

私はこのような辞書を持っています -

('1', {'target': 'http://10.58.48.103:5000/', 'clicks': '1'})
('3', {'target': 'http://slash.org', 'clicks': '4'})
('2', {'target': 'http://10.58.48.58:5000/', 'clicks': '1'})
('5', {'target': 'http://de.com/a', 'clicks': '0'})

これは url_list で返され、render_template で使用されます

def on_list_urls(self, request):
    url_list = self.get_urls()
    return self.render_template('list_urls.html',
        url_list = url_list
    )

テンプレート list_urls は非常に単純です -

{% extends "layout.html" %}
{% block title %}List URLs{% endblock %}
{% block body %}
  <h2>List URLs</h2>
  <ul id="items">
  {% for item in url_list %}
    <li>{{ item }}</li>
  {% endfor %}
  </ul>

{% endblock %}

問題は、辞書内のアイテムにアクセスできないようです。

この線

<li>{{ item }}</li>

注目しているところです。上記のように、辞書内のキーのリストを取得します。

<li>{{ item["target"] }}</li>

何も返しません。ドキュメントの {{ user.url }}">{{ user.username }} タイプのものはどれも機能していないようです。

アイデアをお願いします。初心者 - 優しくしてください。ありがとう。

アップデート

回答ありがとうございます。

Ewanの答えは機能しますが、辞書のリストを使用します。dict を渡してレンダリングしたい (アイテムの非整数インデックスが必要なため)。ジンジャはそれをしますか?

また、url_list を誤って表現しました。それはもっとこのようなものです -

{'a': {'target': 'http://testing.com/test', 'clicks': '0'}, 
'1': {'target': 'http://10.58.48.103:5000/', 'clicks': '1'}, 
'3': {'target': 'http://slash.org', 'clicks': '4'}, 
'2': {'target': 'http://10.58.48.58:5000/', 'clicks': '1'}}

さらなる実験 - dict を渡すと、リスト オブジェクトに関するエラーが発生します。

{% for key in url_list.iteritems() %}

UndefinedError: 'list object' には属性 'iteritems' がありません

再度、感謝します。

なぜ私がリストを渡していたと思ったのに、今はうまくいっているのか、まだ困惑しています。

{% for key, value in url_list.iteritems() %}
    <li>{{ key }} - {{ value["target"] }} - {{ value["clicks"] }}</li>

すべてを出力します。どうもありがとう。

4

3 に答える 3

50

次のurl_listようになります。

url_list = [{'target': 'http://10.58.48.103:5000/', 'clicks': '1'}, 
            {'target': 'http://slash.org', 'clicks': '4'},
            {'target': 'http://10.58.48.58:5000/', 'clicks': '1'},
            {'target': 'http://de.com/a', 'clicks': '0'}]

次に使用:

<li>{{ item["target"] }}</li> 

あなたのテンプレートで動作します。

編集1:

あなたのテンプレートは、あなたがリストを渡していると考えています。それで、私の上記のリストではなく、元の辞書を渡していてよろしいですか?

keyまた、辞書の aと a の両方にアクセスする必要がありvalueます (リストではなく辞書を渡す場合):

パイソン 2.7

{% for key, value in url_list.iteritems() %}
    <li>{{ value["target"] }}</li> 
{% endfor %}

パイソン3

{% for key, value in url_list.items() %}
    <li>{{ value["target"] }}</li> 
{% endfor %}
于 2013-10-02T16:00:43.810 に答える