2012-09-29 27 views
2

這似乎是一個非常基本的問題,但我無法弄清楚。我將一個URL列表傳遞給一個HTML頁面,並試圖在href標籤中打印每個URL。我使用Flask運行測試服務器,並可以確認變量是否正確傳入(我可以打印出整個列表或元素)。使用Python/Flask迭代HTML模板中的URL列表

我的應用程序路徑:

import doaudit # separate Py script that gets these urls 

@app.route('/audit', methods = ['GET']) 
def audit(): 
    return render_template('audit.html', listOfUrls = doaudit.listOfUrls) 

我的模板:

document.write("<a href=\"" + '{{ listOfUrls[i] }}' + "\">linktext</a>"); 

並遍歷所有我的但這並不:上

<html> 
    <head> 
     <title>Data Audit</title> 
</head> 
<body> 

     {% for url in listOfUrls %}   
     <script language="JavaScript"> 
      document.write("<a href=\"" + url + "\">linktext</a>"); 
     </script> 
     {% endfor %} 

    </body> 
</html> 

我已經試過變化工作。

列表的長度可能會有所不同,所以我需要一個迭代解決方案。提前致謝。

回答

4

這是你想要什麼:

{% for url in listOfUrls %}   
    <script language="JavaScript"> 
     document.write("<a href=\"" + {{ url|tojson|safe }} + "\">linktext</a>"); 
    </script> 
{% endfor %} 

{{ url }}部分講述的Jinja2(模板引擎),這url實際上是您在for url in blabla調用,所以變量。沒有它,它是按原樣打印的。在瀏覽器中查看源代碼時可以看到它。這意味着它將被解釋爲一個JS變量,它將是undefined,相當於一個空字符串,然後您會看到它。

編輯:增加了tojson|safe調用,以確保它不會打破JS代碼。你可以這樣做:<a href=\"{{ url }}\">linktext</a>。但是,然後"會打破你的HTML/JS代碼。

編輯2:什麼是tojson過濾器,使它適合放入JS代碼。並且safe過濾器告訴渲染引擎它不應該將其視爲任何文本(應該將其轉義爲在HTML中正確顯示),而是將其視爲安全文本(不包括HTML)。

+0

釘住它。如果沒有安全的應用程序,則完全不起作用。謝謝。 – acpigeon

+1

@acpigeon太好了。我更新了我的答案,提供了有關所用過濾器的更多詳細信息,認爲它可能對這些過濾器更有用。 – jadkik94