如何使用Jinja2在一行中显示项目列表?

时间:2015-10-06 13:00:35

标签: python python-2.7 jinja2

我有一个用Python编写的脚本,它从我的服务器获取点播资产,并使用jinja2作为列表传递给HTML。请参阅下面的代码。

test.py

import requests, re
from jinja2 import Environment, FileSystemLoader

r1 = requests.get("http://172.19.37.3:5600/cmdc/content?region=24802&currency=myr&catalogueId=24802&isPurchasable&filter=source~vod&filter=source~group&count=30&collapse=true&sort=%2btitle&pset=Group1")
r2= requests.get("http://172.19.37.3:5600/cmdc/content?region=28904&catalogueId=24802&filter=source~group&count=255")

env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('VOD.html')
data1 = r1.json()
data2 = r2.json()
assets1 = list()
assets2 = list()

for asset in data1['contents']:
    for media_uri in asset['media']:
        poster_uri = ""
        if media_uri['classification'] == "urn:nnds:Metro:metadata:MediaTypeCS:2007:2.1":
            poster_uri = media_uri['uri']
            a_id = (asset['id'])
            id = a_id[a_id.index('://') + 3:]
            a_id = id
            asset_id = a_id.encode('utf-8')
            asset_title = asset['title'].encode('utf-8')
            asset = [asset_id, asset_title, poster_uri]
            assets1.append(asset)
            poster_uri = poster_uri.encode('utf-8')

for asset in data2['contents']:
    for media_uri in asset['media']:
        poster_uri = ""
        if media_uri['classification'] == "urn:nnds:Metro:metadata:MediaTypeCS:2007:2.1":
            poster_uri = media_uri['uri']
            a_id = (asset['id'])
            id = a_id[a_id.index('://') + 3:]
            a_id = id
            asset_id = a_id.encode('utf-8')
            asset_title = asset['title'].encode('utf-8')
            asset = [asset_id, asset_title, poster_uri]
            assets2.append(asset)
            poster_uri = poster_uri.encode('utf-8')


templateVars = { "VOD1" : assets1, "VOD2": assets2 }

outputText = template.render( templateVars )
with open("VOD_Parsing.html", "wb") as fh:
    fh.write(outputText)

VOD.html

<!doctype html>
<html lang="en">
<body>

<div id="content">
  {% for item in VOD1 %}
     <li>ID: {{ item[0] }}</li><li> Title: {{ item[1] }}</b></li>
     <img src="{{ item[2] }}" alt="dummy.jpg"> </img>
  {% endfor %}
  {% for item in VOD2 %}
     <li>ID: {{ item[0] }}</li><li> Title: {{ item[1] }}</b></li>
     <img src="{{ item[2] }}" alt="dummy.jpg"> </img>
  {% endfor %}

</div>

</body>
</html>

代码在传递资源列表和在html页面上打印时非常有效。我面临的问题是所有资产和细节都是一个接一个地显示出来的。我想要的是第一个for循环的元素的水平列表,然后是第二个for循环的第二个水平元素。我怎样才能做到这一点?如果我删除li标签,则资产和详细信息将以自动调整的方式显示,而不是单行显示。

1 个答案:

答案 0 :(得分:1)

如果您所说的HTML源代码如下:

<li>1</li><li>2</li2>

然后您可以使用{%- -%}表示法:

  {%- for item in VOD1 -%}
     <li>{{ item[1] }}</li><li>{{ item[2] }}</li>
  {%- endfor -%}
  {%- for item in VOD1 -%}
     <li>{{ item[3] }}</li><li>{{ item[4] }}</li>
  {%- endfor -%}

如果您正在谈论显示结果,请使用此2中的1 - 但这与Jinja2无关:

li {
    display: inline;
}

li {
    float: left;
}