在 Jinja2 中渲染字典

2023-12-27

我正在使用 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 %}

问题是,我似乎无法访问字典中的项目。

The line

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

这是我关注的地方。如上所述,我得到了字典中键的列表。

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

什么也不返回。没有任何一个 {{ user.url }}">{{ user.用户名 }} 在文档中输入内容似乎有效。

请问有什么想法吗?新手——要温柔。谢谢。

Update

感谢您的回复。

伊万的答案有效,但使用了一个字典列表。我想传递一个字典并渲染它(因为我想要一个非整数的项目索引)。金贾这样做吗?

另外 - 我错误地表示了 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() %}

UndefinedError:“列表对象”没有属性“iteritems”

再次感谢。

仍然困惑为什么它认为我正在传递一个列表但现在它开始工作了。

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

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


Your 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> 

在你的模板中将会起作用。

Edit 1:

您的模板认为您正在传递一个列表,所以您确定您正在传递原始字典而不是我上面的列表吗?

您还需要访问key and a value在你的字典中(当你传递字典而不是列表时):

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 %}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Jinja2 中渲染字典 的相关文章

随机推荐