表单验证后,我的textarea丢失了第一行。
显示textarea的结果页面对应于相同的视图,模板作为用户输入数据的页面。换句话说,页面是相同的。
在我的代码中,我有类似的东西:
if request.method == 'POST':
f = MyForm( request.POST )
if f.is_valid(): # f is a form
context.update( value = f.cleaned_data[ 'value' ] )
# then 'value' becomes a 'value' context variable for a template.
模板中的片段:
...
<textarea name='value'>{{value}}</textarea>
<!-- It's a template for a result page -->
...
有趣的是,如果textarea在开头有很多'\ n'行,那么对于每个'POST'请求,它会在结果页面中丢失其中一个(并且仅其中一个)发布的数据显示在textarea中。
有人可以帮忙吗?如何在没有黑客代码的情况下解决问题?
我希望textarea显示用户在上一页上输入的所有开头'\ n'行。
更多
数据来自客户端 - 如果我们在视图中输出'value',则不会丢失任何换行符。问题是要在模板中进一步显示。
环境:Windows,Firefox / Opera。
答案 0 :(得分:1)
你确定这是Django特有的吗?
<html>
<body>
<textarea>`[CR]LF`
`[CR]LF`
test</textarea>
</body>
</html>
保存为普通.html文件时,浏览器中只有一个换行符。浏览器将第一个换行符视为“HTML代码格式化”,而不是值的一部分。
修改强>
您应该可以通过修改模板来解决此问题:
<textarea name='value'>
{{value}}</textarea>
<!-- It's a template for a result page -->
只有第一个后面的换行符显示在框中(例如,如果你有3个,你得到2个,如果你有2个得到1,如果你得到1得到0,如果你得到0则得到0)。这是因为浏览器会将第一个换行符作为标记的一部分使用,因此将模板更改为已包含此第一个换行符应解决您的问题。
答案 1 :(得分:0)
我认为浏览器忽略/ n作为html中的新行渲染文本? html使用
<br>
换新行。要呈现一个文本块,您可以将其作为列表包含在表单中,其中每行数据都是一个新的列表项,然后使用以下内容在模板中呈现:
{{ text_list|join:"<br>"}}
/ n将保留在您的文本中,因此您仍然可以将其用于正则表达式等...
答案 2 :(得分:0)
你能尝试下面的代码吗,我遇到了类似的问题,这就是我解决它的方法。
<pre>{{text_list|safeseq|join:"\r\n"}}</pre>
<p>{{text_list|safeseq|join:"\n"}}</p>
<p><pre>{{text_list|safeseq|join:"\r\n"}}</p>
LMK