2014-01-23 3 views
4

Я столкнулся с проблемой в Iterating for loop над несколькими списками в шаблоне jinja2 в колбе.Итерация по нескольким спискам в python - flask - jinja2 templates

Мой код-то выглядит, как показано ниже

Type = 'RS' 
IDs = ['1001','1002'] 
msgs = ['Success','Success'] 
rcs = ['0','1'] 
return render_template('form_result.html',type=type,IDs=IDs,msgs=msgs,rcs=rcs) 

Я не уверен, придумывая правильный шаблон до сих пор,

<html> 
    <head> 
    <title>Response</title> 

    </head> 
    <body> 
    <h1>Type - {{Type}}!</h1> 
    {% for reqID,msg,rc in reqIDs,msgs,rcs %} 
    <h1>ID - {{ID}}</h1> 
    {% if rc %} 
    <h1>Status - {{msg}}!</h1> 
    {% else %} 
    <h1> Failed </h1> 
    {% endif %} 
    {% endfor %} 
    </body> 
</html> 

Выход Я пытаюсь получить что-то, как показано ниже в HTML страница

Type - RS 
ID - 1001 
Status - Failed 

ID - 1002 
Status - Success 
+0

Вы должны использовать [застежка-молния()] (http://docs.python.org/2/library/functions.html#zip) –

+0

@KobiK это был мой первый думаю тоже .. .. Он вызывает ошибку UndefinedError: 'zip' не определено – user2190101

ответ

15

вам нужно zip(), но оно не определено в шаблонах jinja2.

один раствор сжать его до тогоrender_template функции называется, как:

вид функции:

return render_template('form_result.html',type=type,reqIDs_msgs_rcs=zip(IDs,msgs,rcs)) 

шаблона:

{% for reqID,msg,rc in reqIDs_msgs_rcs %} 
<h1>ID - {{ID}}</h1> 
{% if rc %} 
<h1>Status - {{msg}}!</h1> 
{% else %} 
<h1> Failed </h1> 
{% endif %} 
{% endfor %} 

также, вы можете добавить zip к Jinja2 template global, используя функции Flask.add_template_x (или Flask.template_x декораторы)

@app.template_global(name='zip') 
def _zip(*args, **kwargs): #to not overwrite builtin zip in globals 
    return __builtins__.zip(*args, **kwargs) 
+0

Awesome ..... Его то, что я пытаюсь получить. Спасибо ... – user2190101

+0

Я обнаружил, что https://docs.python.org/2/library/__builtin__.html говорит, что '__builtins__' является детальностью реализации Cpython, а не переносимой. Я использовал 'import __builtin__' и' return __builtin __. Zip' (no s) – dajobe

+0

Не можете ли вы просто использовать 'zip' вместо' __builtins __. Zip'? – bfontaine

Смежные вопросы