表单验证后,我的文本区域丢失了它的第一行。
显示textarea的结果页面与用户输入数据的页面对应相同的 View 和模板。换句话说,页面是相同的。
在我的代码中我有这样的东西:
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 -->
...
有趣的是,如果文本区域在开头有许多 '\n' 行,那么对于每个 'POST' 请求,它会在结果页面中丢失其中之一(并且仅其中之一),其中发布的数据显示在文本区域中。
有人可以帮忙吗?如何在不破解代码的情况下解决问题?
我希望 textarea 显示用户在前一页上输入的所有以 '\n' 开头的行。
更多。
数据通常来自客户端 - 如果我们在 View 中输出“值”,则不会丢失任何换行符。问题是在模板中进一步显示。
环境:Windows、Firefox/Opera。
最佳答案
你确定这是 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 个)。这是因为您的浏览器将第一个换行符作为标记的一部分使用,因此将模板更改为已包含第一个换行符应该可以解决您的问题。
关于html - 为什么在 'new line' 或 'POST' 请求后 django 模板中缺少一个 'GET'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15554545/