在JJAA2中呈现词典

2022-02-27 00:00:00 python jinja2

问题描述

我正在使用URL缩短器(基于Werkzeug的Short演示应用)。

我有一个这样的词典-

('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}}&Quot;>;{{user.username}} 文档中的键入内容似乎起作用。

请给我点子好吗?新手-温柔点。谢谢。

更新

感谢您的回复。

Ewan的答案有效,但使用了一系列词典。我想传递一个字典并呈现它(因为我想要一个非整数的项索引)。金佳也这么做吗?

还有-I错误表示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'}}

进一步试验-传递字典会产生有关列表对象的错误。

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

UnfinedError:‘List Object’没有‘iterItems’属性

再次感谢。

仍然不明白为什么它认为我在传递列表,但现在让它工作了。

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

打印出所有内容。非常感谢。


解决方案

您的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:

您的模板认为您传入的是列表,所以您确定传入的是原始词典而不是我的上面的列表吗?

您还需要访问字典中的keyvalue(当您传递字典而不是列表时):

Python 2.7

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

Python 3

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

相关文章