2017-03-18 10 views
0

にタプルのリストを印刷:私は私のhtmlフラスコテンプレートにタプルのリストを印刷しようとしていますが、私はこのエラーを取得していフラスコ

self.name, self.filename) 
jinja2.exceptions.TemplateSyntaxError: expected token ':', got '}' 

私が置いたとき、私は500内部サーバーエラーを取得localhost私のブラウザのアドレス

データをブラウザに印刷するにはどうすればよいですか?

CODE: eslJobs.py

from flask import Flask, render_template  
import bs4 as bs 
import urllib.request 

app = Flask(__name__) 

@app.route('/') 
def chinaJobs(): 
    sauce = urllib.request.urlopen('http://www.eslcafe.com/jobs/china/').read() 

    soup = bs.BeautifulSoup(sauce, 'html.parser') 

    dl = soup.dl 

    chinaAds = [] 
    china = [] 

    for words in dl.find_all('a'): 
     links = words.get('href') 
     link_text = words.text 

     if 'university' in link_text.lower(): 
      chinaAds.append([links, link_text]) 

     if 'college' in link_text.lower(): 
      chinaAds.append([links, link_text]) 

    for ad in chinaAds: 
     china.append(tuple(ad)) 
     return render_template("eslJobs.html", china=china) 

if __name__ == "__main__": 
app.run() 

CODE: eslJobs.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>ESL Jobs</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/bootstrap.min.css') }}"> 
</head> 
<body> 

<div class="page-header"> 
    <h1>College &amp; University ESL Jobs</h1> 
</div> 


<ul class="list-group"> 
{% for href, caption in {{ china }}: %} 
    <li class="list-group-item"><a href="{{ href }}">{{ caption }}</a> </li> 
{% endfor %} 
</ul> 
</body> 
</html> 
+0

uがはっきりしていない私にはどこ掲載コードに相関する?完全なトレースバックエラーメッセージを投稿することができます。 –

+0

@IronFistエラーメッセージは非常に長いです。 – nasan

答えて

1

私はあなたがこの行を修正する必要があると思う:

{% for href, caption in {{ china }}: %} 

{% for href, caption in china %} 

にボーナス

このコード

for words in dl.find_all('a'): 
    links = words.get('href') 
    link_text = words.text 

    if 'university' in link_text.lower(): 
     chinaAds.append([links, link_text]) 

    if 'college' in link_text.lower(): 
     chinaAds.append([links, link_text]) 

for ad in chinaAds: 
    china.append(tuple(ad)) 

が全てに最適化することができます。

for words in dl.find_all('a'): 
    links = words.get('href') 
    link_text = words.text 
    link_lower = link_text.lower() 

    if ('university' in link_lower) or ('college' in link_lower): 
     chinaAds.append((links, link_text)) 

それからちょうどchinaAdsをレンダリング:

#fix indentation of your return statement, on your actual code 
#it seems belonging to the for loop 
return render_template("eslJobs.html", china=chinaAds) 
1

jinja documentFor使用を参照してください。

<h1>Members</h1> 
<ul> 
{% for user in users %} 
    <li>{{ user.username|e }}</li> 
{% endfor %} 
</ul> 

したがって、あなたは{% %}の内側に、あなたはそれを削除することができ、あなたのテンプレートに二重括弧は必要ありません。あなたのPythonスクリプトで

{% for href, caption in china : %} 
    <li class="list-group-item"><a href="{{ href }}">{{ caption }}</a> </li> 
{% endfor %} 

、インデントエラーは完全なリストを得ることからあなたを防ぐこと、あります。

for ad in chinaAds: 
    china.append(tuple(ad)) 
return render_template("eslJobs.html", china=china) 
+0

ハハ! OK。それは素晴らしいです。私は完全なリストを印刷するためにループのために別のものを追加しました。ありがとう! – nasan

+0

私は自分の答えを変更しました。あなたは完全なリストを得ることができます。 – Aaron

関連する問題