我有一个用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¤cy=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标签,则资产和详细信息将以自动调整的方式显示,而不是单行显示。
答案 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;
}