& # 39;安全# 39;Filter在textarea - django中不起作用

'safe' filter is not working in textarea - django

本文关键字:django 不起作用 Filter 安全 textarea      更新时间:2023-09-26

我正在显示用户给出的编辑页面。用户在文本区输入一些文本,点击预览按钮。在预览页面中,他看到的只是他给出的(我正在用<br>替换'n’s)。

我像{{inputtext|safe}}一样对他的输入进行safe。但是如果他点击编辑按钮,在我渲染这个预览输入文本的地方,输入文本显示为:text</br></br>text,而不像它在预览页面中的样子。

html预览:

{{inputtext|safe}}
<input type="hidden" name="inputtext" value="{{inputtext}}" />

输入页:

<textarea>{{inputtext|safe}}</textarea>
<textarea name="inputtext" style="display: none">{{inputtext}}</textarea>

我所做的是:接受用户的输入,将所有'n替换为<br/>,并将新的inputtext放入隐藏的文本区域,以便我可以稍后渲染它以预览。

在我的views.py中,我只是渲染。没有什么大事发生:

def addcontent(request):
   if request.POST.get('inputtext'):
       inputtext = request.POST.get('inputtext')
       return render(request, 'addpage.html', {'inputtext':inputtext})
   else:
       return render(request, 'addpage.html', {})

为什么文本不显示换行,即使我是安全的?我也尝试了|linebreaks,但没有成功

是否有一些特殊情况与文本区和安全过滤器?

:

如果我做{{inputtext|safe}} textarea之外,它工作得很好(显示换行)。只有在textarea内,|safe是没有作用的

我认为问题是你不能在文本区显示html输出。linebreaks只是用brp标签替换换行符。

为什么在代码中将换行符替换为br ?如果你只是想预览文本,但没有显示换行符,那么使用css-styles white-space: pre-wrap。这将显示输入的文本