在web2py中的每个结束html标记后添加一行换行符



原始

我想解析一个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元素。

&lt;form&gt;&lt;label for=&quot;email_field&quot;&gt;Email:&lt;/label&gt;
&lt;input type=&quot;email&quot; name=&quot;email_field&quot;/&gt;&lt;label     
for=&quot;password_field&quot;&gt;Password:&lt;/label&gt;
&lt;input type=&quot;password&quot; name=&quot;password_field&quot;/&gt;&lt;input   
type=&quot;submit&quot; value=&quot;Login&quot;/&gt;&lt;/form&gt;


编辑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。

相关内容

  • 没有找到相关文章

最新更新