关闭打开的标签而不换行 <p>
Close open tags without wrapping in <p>
我正在尝试为我的表单编写一个干净的方法,这样如果用户留下一个打开的内嵌标签,它就会被关闭,例如:
Here's an <b> open tag -> Here's an <b> open tag</b>
<i>Here are two <b>open tags -> <i>Here are two <b> open tags</b></i>
我的代码是:
def clean_custom_title(self):
title = self.cleaned_data.get('custom_title')
if title:
title = lxml.etree.tostring(lxml.html.fromstring(title))
return title
这非常接近工作,除了当字符串不以开放标签开头时,就像我的第一个例子,它将所有内容包装在 <p>
标签中所以我得到
Here's an <b> open tag -> <p>Here's an <b> open tag</b></p>
我不能只去掉外部标签,因为在我的第二个例子中它们可能是正确的。我不担心可能的输入已经包含 p
标签。可以想象,我可以通过删除 <p>
来剥离它们,但这看起来很老套和恶心。
请注意,我一直在使用 lxml。我认为 BS4 也会更好,但这不是我的决定。
将所有内容包装在一次性标签中,然后获取最外层元素的内部内容,如下所示:
def clean_custom_title(self):
title = self.cleaned_data.get('custom_title')
if title:
title = "<foo>%s</foo>"%title
title = lxml.html.fromstring(title)
# title = lxml.some_function(title) # strip <foo> in a 'proper' way
title = lxml.etree.tostring(title)
title = title[5:-6] # This is a hack to illustrate the premise
return title
我正在尝试为我的表单编写一个干净的方法,这样如果用户留下一个打开的内嵌标签,它就会被关闭,例如:
Here's an <b> open tag -> Here's an <b> open tag</b>
<i>Here are two <b>open tags -> <i>Here are two <b> open tags</b></i>
我的代码是:
def clean_custom_title(self):
title = self.cleaned_data.get('custom_title')
if title:
title = lxml.etree.tostring(lxml.html.fromstring(title))
return title
这非常接近工作,除了当字符串不以开放标签开头时,就像我的第一个例子,它将所有内容包装在 <p>
标签中所以我得到
Here's an <b> open tag -> <p>Here's an <b> open tag</b></p>
我不能只去掉外部标签,因为在我的第二个例子中它们可能是正确的。我不担心可能的输入已经包含 p
标签。可以想象,我可以通过删除 <p>
来剥离它们,但这看起来很老套和恶心。
请注意,我一直在使用 lxml。我认为 BS4 也会更好,但这不是我的决定。
将所有内容包装在一次性标签中,然后获取最外层元素的内部内容,如下所示:
def clean_custom_title(self):
title = self.cleaned_data.get('custom_title')
if title:
title = "<foo>%s</foo>"%title
title = lxml.html.fromstring(title)
# title = lxml.some_function(title) # strip <foo> in a 'proper' way
title = lxml.etree.tostring(title)
title = title[5:-6] # This is a hack to illustrate the premise
return title