我遇到基于变量在python和JSON中循环的问题。我想要做的是根据传递的一个变量打印一行JSON数据。
下面是python文件的代码:
@app.route('/<artist_name>/')
def artist(artist_name):
list = [
{'artist_name': 'Nirvana', 'album_name': 'Nevermind', 'date_of_release': '1993', 'img': 'https://upload.wikimedia.org/wikipedia/en/b/b7/NirvanaNevermindalbumcover.jpg'},
{'artist_name': 'Eminem', 'album_name': 'Marshal Mathers LP', 'date_of_release': '2000', 'img': 'http://e.snmc.io/lk/f/l/6b09725acea3aefbafbf503a76885d0c/1612455.jpg'},
{'artist_name': 'System of a Down', 'album_name': 'Toxicity', 'date_of_release': '2001', 'img': 'http://loudwire.com/files/2015/09/System-of-a-Down-Toxicity.png'},
{'artist_name': 'Korn', 'album_name': 'Life is Peachy', 'date_of_release': '1996', 'img': 'http://loudwire.com/files/2014/01/Life-is-Peachy.jpg'}
]
return render_template("artist.html", results=list, artist_name=artist_name)
这是我的artist.html模板:
{% if results %}
<ul>
{% for item in results if item.artist_name == item.artist_name %}
<li>{{ item.artist_name }}</li>
<li>{{ item.date_of_release}}</li>
{% endfor %}
</ul>
{% endif %}
我想要实现的是,当传递“artist_name”变量时,我将能够打印“artist_name”变量和“date_of_release”变量,而是根据变量“artist_name”打印所有四个记录而不是一个”。任何人都可以帮我吗?谢谢。
答案 0 :(得分:0)
我的解决方案不那么复杂,而且正在工作:)
from flask import Flask,render_template,url_for
import json
app = Flask(__name__)
app.debug = False
@app.route('/<artist_name>/')
def artist(artist_name):
list = [
{'artist_name': 'Nirvana', 'album_name': 'Nevermind', 'date_of_release': '1993', 'img': 'https://upload.wikimedia.org/wikipedia/en/b/b7/NirvanaNevermindalbumcover.jpg'},
{'artist_name': 'Eminem', 'album_name': 'Marshal Mathers LP', 'date_of_release': '2000', 'img': 'http://e.snmc.io/lk/f/l/6b09725acea3aefbafbf503a76885d0c/1612455.jpg'},
{'artist_name': 'System of a Down', 'album_name': 'Toxicity', 'date_of_release': '2001', 'img': 'http://loudwire.com/files/2015/09/System-of-a-Down-Toxicity.png'},
{'artist_name': 'Korn', 'album_name': 'Life is Peachy', 'date_of_release': '1996', 'img': 'http://loudwire.com/files/2014/01/Life-is-Peachy.jpg'}
]
res = ""
for i in list:
if i.get('artist_name') == artist_name:
res = i
return render_template("artist.html", results=list, artist_name=res)
if __name__ == '__main__':
app.run(host='0.0.0.0')
模板:
{% if results %}
<ul>
<li>{{ artist_name["artist_name"] }}</li>
<li>{{ artist_name["date_of_release"]}}</li>
</ul>
{% endif %}
(url中的artist_name区分大小写)
答案 1 :(得分:0)
在评论中,HJ波特和马库斯说得对:然而我会对你的网址的网址编码非常小心,并强制执行艺术家名称:是&#34 ;一个羽绒系统&#34;与&#34;系统的向下&#34;相同,并且瓶子总能正确解码吗?
{% if results %}
<ul>
{% for item in results if item.artist_name == artist_name %}
<li>{{ item.artist_name }}</li>
<li>{{ item.date_of_release}}</li>
{% endfor %}
</ul>
{% endif %}
看一下Is a URL allowed to contain a space? TLDR? &#34;更短的回答:不,你必须编码一个空格;将空格编码为+是正确的,但仅在查询字符串中;在路径中你必须使用%20。&#34;
我还会更进一步,并建议重新构建代码 - 尝试将业务逻辑(即决定不显示或加载所有数据)保存在一个文件中,&#39; python&#39;和在另一个中显示逻辑(决定将它们放在子弹点或div上)(&#39;模板&#39;)