web2py - 如何注入HTML

2 投票
2 回答
5333 浏览
提问于 2025-04-15 14:59

我用 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 个回答

0

只需要把它加在 rows.xml() 返回的字符串前面或后面就可以了:

html = '<html><head>...</head><body>' + rows.xml() + '</body></html>'
2

你可以使用很多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)

撰写回答