使用混合HTML \ plain文本字符串的换行符过滤器

时间:2016-01-08 19:31:10

标签: html django filter line-breaks

我有一个这样的字符串:

Plain text with newlines.
But it also has some html.

<ul>
<li>first</li>
<li>second</li>
</ul>

我希望lineabreaks过滤器输出这样的HTML:

<p>Plain text with newlines.<br/>
But it also has some html.</p>
<ul>
<li>first</li>
<li>second</li>
</ul>

但我得到的是:

<p>Plain text with newlines.<br/>
But it also has some html.</p>
<ul><br />
<li>first</li><br />
<li>second</li><br />
</ul>

是否有任何想法阻止HTML部分被破坏,但仍允许过滤器在纯文本部分上执行其工作?

编辑 - @Shang Wang:此过滤器的实际使用情况是熟悉HTML并且不想使用富文本编辑器的作者的后端,但仍希望避免输入“&lt; br /&gt ;”或“&lt; p&gt;”他们每次都需要换行。

基本上,我要做的是模仿Drupal的“过滤HTML”输入过滤器,这对于需要一种快速编写简单文章而不使用WYSIWYG编辑器的编辑器,但有可能添加更多高级HTML标签(比如,等等)。

希望这有助于理解我的目标,并抱歉我的英语。

编辑2 - @karison:我还没有特别的方法。我目前的代码是:

{{ myText | bleach | linebreaks }}

我想避免为此写一个自定义过滤器,所以我没有任何代码可以显示。由于这是我在Drupal和其他CMS中看到的内容,我希望有一些方法可以使用当前的换行符过滤器。

1 个答案:

答案 0 :(得分:0)

不,我不认为这是可能的,也没有多大意义。您也可以在html部分中添加新行:

<p>This is a
    multiple line text.
</p>

但是当浏览器渲染它们时,它们不会显示为多行。那么模板过滤器假设要做什么?我认为最好的选择是在你的观点中自己分开文本。

修改

首先,我不知道存在任何此类django模板过滤器,因为您的情况太具体而无法使其成为公共模板过滤器,而且要求很复杂并且需要解析器来区分html和纯文本。

其次,通过为每个新行(w3school's doc)插入<br/>不会呈现多行文本。相反,您使用标记<pre></pre>来包装您的段落。理论上,对于每个纯文本块,您可以在其周围包裹<pre>,然后新行将“按原样”显示。