在Django中呈现html和纯文本的最佳方法是什么?

时间:2018-08-10 21:21:28

标签: html django django-templates whitespace removing-whitespace

在我的网站上,用户可以创建纯文本和html混合的帖子。我无法很好地呈现他们的帖子。

例如,他们可能会写:

interface

我想要呈现空白1和3,而不是空白2。我该怎么做?

我尝试使用This is the first line of the post. <!-- whitespace 1 --> <ul> <li>List item 1.</li> <!-- whitespace 2 --> <li>List item 2.</li> <li>List item 3.</li> </ul> <!-- whitespace 3 --> This is the last line of the post. linebreaks的组合,但无法正常工作。

谢谢

杰克

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,您可以使用正则表达式获取每个列表内容的匹配集合,然后检查这些内容以确保它们不包含任何<br>标记。要收集列表元素的内容,可以使用此模式(?s)(?<=<[ou]l>).*?(?=<\/[ou]l>)

使用re.findall("(?s)(?<=<[ou]l>).*?(?=<\/[ou]l>)", inputstring)获得匹配项后,您可以执行以下操作:

for m in matches:
  if not re.match("<br>", m):
    #input is fine
  else:
    #lists cannot contain <br> tags

这会拒绝包含其中带有<br>标签的列表的输入。

为解释模式, (?s)使得.也匹配换行符

(?<=<[ou]l>)表示模式必须以<ol><ul>开头

.*?意味着捕获所有内容,直到模式的下一部分

(?=<\/[ou]l>)表示模式后跟</ol></ul>