在web2py中解析HTML模板

时间:2013-09-30 22:20:42

标签: python web2py

我正在尝试解决这个web2py问题,我认为我对正在发生的事情有一些基本的误解。

说我有一个商店,我希望在我的index.html多个包含产品的盒子里。我希望从模板中解析每个这样的盒子。

我尝试采用以下架构。在控制器中我有

def index():
   products = db().select(db.products.ALL)
   return dict(products=products)
index.html中的

{{for i in range(0,len(products)):}}
  {{ context=dict(product=products[i])  }}
  {{ =response.render('template.html', context)}}
{{pass}}

并且在template.html我有类似

的内容
<div id=...> <h1> {{=product.price}} </h1>...

问题是结果是 literaly 。也就是说,当浏览index.html我看到html标签时:

enter image description here

我怀疑我的整个方法都是错误的。如何做到这一点?

1 个答案:

答案 0 :(得分:3)

{{for product in products:}}
  {{=XML(response.render('template.html', product.as_dict()))}}
{{pass}}

在template.html中:

<div id=...> <h1> {{=price}} </h1>...

response.render()返回一个字符串,所有字符串都在模板中转义。要防止转义,必须将字符串包装在XML()

以上还包括一些简化。在for循环中,您可以直接遍历products中的行,然后您可以将单个产品行转换为dict,并将该dict作为上下文传递给template.html(所以你可以只引用price而不是product.price)。

注意,如果您不需要在其他地方使用template.html,您也可以直接将其内容移动到index.html中的for循环中。