'安全'过滤器在textarea中不起作用 - django

时间:2014-05-24 17:45:31

标签: javascript html django django-templates

我正在显示用户提供的编辑页面。用户在textarea中输入一些带有输入按钮的文本并点击预览按钮。在预览页面中,他看到了他给出的内容(我正在用<br>替换\ n&#39; s)。

safe输入{{inputtext|safe}}这样的输入。但是,如果他点击编辑按钮,我在这里呈现此预览输入文本,则输入文本显示为:text</br></br>text,而不像预览页面中的那样。

预览中的HTML:

{{inputtext|safe}}
<input type="hidden" name="inputtext" value="{{inputtext}}" />
输入页面中的

html:

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

我所做的是:接受用户的输入,用\n替换所有<br/>并将新的输入文本放入隐藏的textarea中,以便我以后再渲染预览。

在我的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但没有成功

textarea和安全过滤器是否有特殊情况?

更新

如果我对textarea {{inputtext|safe}}感到满意,那么效果很好(显示为linebreak-ed)。仅在textarea内部,|safe无论如何都没有效果

1 个答案:

答案 0 :(得分:2)

我认为问题在于您无法在textarea中显示html输出。 linebreaks只需使用brp代码替换换行符。

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