我有一个这样的字符串:
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中看到的内容,我希望有一些方法可以使用当前的换行符过滤器。
答案 0 :(得分:0)
不,我不认为这是可能的,也没有多大意义。您也可以在html部分中添加新行:
<p>This is a
multiple line text.
</p>
但是当浏览器渲染它们时,它们不会显示为多行。那么模板过滤器假设要做什么?我认为最好的选择是在你的观点中自己分开文本。
修改强>:
首先,我不知道存在任何此类django模板过滤器,因为您的情况太具体而无法使其成为公共模板过滤器,而且要求很复杂并且需要解析器来区分html和纯文本。
其次,通过为每个新行(w3school's doc)插入<br/>
不会呈现多行文本。相反,您使用标记<pre></pre>
来包装您的段落。理论上,对于每个纯文本块,您可以在其周围包裹<pre>
,然后新行将“按原样”显示。