2016-10-14 2 views
-1

파이썬에서 루핑에 문제가 있고 변수를 기반으로 JSON이 있습니다. 시도한 것은 통과 된 하나의 변수를 기반으로 한 행의 JSON 데이터 만 인쇄하는 것입니다.파이썬과 플라스크, 루핑 및 변수를 기반으로 데이터 인쇄

을 Heres

파이썬 파일에 대한 코드 :

@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"변수 인 경우가되는 것이 무엇 메신저 달성하기 위해 노력하고

passed "artist_name"변수와 "date_of_release"변수를 인쇄 할 수 있지만 "artist_name"변수를 기반으로하는 대신 네 개의 레코드를 모두 인쇄합니다. 아무도 이걸 도와 줄 수 있니? 고맙습니다.

+2

아마도이 때문에 : item.artist_name == item.artist_name'? – hjpotter92

+0

item.artist_name == 결과와 같은 다양한 변형을 시도했지만 올바르게 수행하는 방법을 알 수 없습니다. – Animalovsky

+2

try item.artist_name == artist_name –

답변

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 %} 

+1

감사합니다. 공백이있는 변수를 제외하고는 "Markus K"가 대답합니다. – Animalovsky

0
코멘트에서

, HJ 포터와 마르쿠스 (URL에 ARTIST_NAME는 대소 문자를 구분) 그것이 맞다 : 그러나 나는 당신의 URL의 URL 인코딩과 아티스트 이름의 capitlisation 강화에 매우 신중할 것입니다 : "System Of A Down "과 동일하며 플라스크가 항상 올바르게 디코딩됩니까?

{% 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을 살펴 보시겠습니까? "짧은 답변 : 아니오, 공백을 인코딩해야합니다. 공백을 +로 인코딩하는 것이 맞지만 쿼리 문자열에서만 가능하며 경로에서 % 20을 (를) 사용해야합니다."

나는 또한 더 나아가서 코드의 재구성을 제안한다. - 비즈니스 논리 (즉, 모든 데이터를 표시하거나로드하지 않기로 결정)를 '파이썬'및 표시 논리 (결정 글 머리 기호 또는 div에 넣을)

+1

감사합니다. 나는 그것을 살펴볼 것입니다. – Animalovsky