原始
我想解析一个html代码字符串,并在结束标记后添加换行符+在初始表单标记后添加。这是迄今为止的代码。它在"re.sub"行中给了我一个错误。我不明白正则表达式为什么失败。
def user():
tags = "<form><label for="email_field">Email:</label><input type="email" name="email_field"/><label for="password_field">Password:</label><input type="password" name="password_field"/><input type="submit" value="Login"/></form>"
result = re.sub("(</.*?>)", "1n", tags)
return dict(form_code=result)
PS。我有一种感觉,这可能不是最好的方式。。。但我仍然想学习如何做到这一点。
编辑
我的默认.py中缺少"import re"。谢谢ruakh。
import re
现在我的页面源代码显示如下(在客户端浏览器中检查(。实际页面将表单代码显示为文本,而不是UI元素。
<form><label for="email_field">Email:</label>
<input type="email" name="email_field"/><label
for="password_field">Password:</label>
<input type="password" name="password_field"/><input
type="submit" value="Login"/></form>
编辑2
在default.py中添加XML((helper后,表单代码被呈现为UI元素。感谢Anthony的帮助。更正了以下行:
return dict(form_code=XML(result))
最终版本
修复regex我自己想。这不是最佳解决方案,但至少它有效。最终代码:
import re
def user():
tags = "<form><label for="email_field">Email:</label><input type="email" name="email_field"/><label for="password_field">Password:</label><input type="password" name="password_field"/><input type="submit" value="Login"/></form>"
tags = re.sub(r"(<form>)", r"<form>n ", tags)
tags = re.sub(r"(</.*?>)", r"1n ", tags)
tags = re.sub(r"(/>)", r"/>n ", tags)
tags = re.sub(r"( </form>)", r"</form>n", tags)
return dict(form_code=XML(tags))
我看到的唯一问题是需要将"1n"
更改为r"1n"
(使用"原始"字符串表示法(;否则CCD_ 3被解释为八进制转义(意味着字符U+0001(。但这本身不应该给你一个错误。你收到了什么错误消息?
默认情况下,出于安全原因,web2py会转义视图中插入的所有文本。为了避免这种情况,只需在控制器中使用XML((帮助程序:
return dict(form_code=XML(result))
或在视图中:
{{=XML(form_code)}}
除非代码来自可信来源,否则不要这样做——否则它可能包含恶意Javascript。