web2py - 如何注入HTML
我用 rows.xml() 这个方法生成了一个 HTML 页面。我想知道怎么往这个生成的 HTML 页面里添加一些 HTML 代码,比如:添加一个 logo,链接一个 CSS 文件等等。
rows=db(db.member.membership_id==request.args[0]).select(db.member.membership_id
,db.member.first_name,db.member.middle_name
,db.member.last_name)
return rows.xml()
2 个回答
只需要把它加在 rows.xml()
返回的字符串前面或后面就可以了:
html = '<html><head>...</head><body>' + rows.xml() + '</body></html>'
你可以使用很多HTML助手,比如:
html_code = A('<click>', rows.xml(), _href='http://mylink')
html_code = B('Results:', rows.xml(), _class='results', _id=1)
html_page = HTML(BODY(B('Results:', rows.xml(), _class='results', _id=1)))
等等。
你甚至可以自动创建一个完整的表格:
table = SQLTABLE(rows, orderby=True, _width="100%")
然后可以对它进行拆解,插入链接或修改其中的元素。
这非常强大,通常你不需要自己去写实际的HTML代码。这里有一个速查表,或者你可以直接查看网站文档。
补充说明:为了确保,你其实不需要生成整个HTML页面,直接让web2py把你的响应放到一个和你的控制器同名的模板里会更简单(或者用response.view = 'template.html'
强制指定一个特定的模板)。文档中的教程会更详细地解释这一点。
简单来说,如果你在实现index
这个功能,你可以返回一个字符串(整个页面的HTML,这似乎是你想要的),或者返回一个字典来使用模板。
在第一种情况下,你可以这样写你的函数:
def index():
# ... code to extract the rows
return HTML(BODY(B('Results:', rows.xml(), _class='results', _id=1))).xml()
否则,你可以在views/controller/index.html中写一个HTML模板(或者如果你在函数中插入response.view=...
,可以使用另一个文件来重用同一个模板),这个模板可能是这样的:
<html><head></head>
<body>
{{=message}}
</body>
</html>
然后返回一个字典:
def index():
# ... code to extract the rows
html = B('Results:', rows.xml(), _class='results', _id=1)
return dict(message=html)