3

表单验证后,我的 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' 行。

更多

数据通常来自客户端 - 如果我们在视图中输出“值”,则不会丢失任何换行符。问题是在模板中进一步显示。

环境:Windows、Firefox/Opera。

4

3 回答 3

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)。这是因为浏览器会使用第一个换行符作为标签的一部分,因此将模板更改为已经包含第一个换行符应该可以解决您的问题。

于 2013-03-21T18:09:40.610 回答
0

我认为浏览器会忽略 /n 作为 html 中的新行渲染文本?html 使用

<br>

换一条新线。要呈现文本块,您可以将其作为列表包含在表单中,其中每行数据都是一个新的列表项,然后使用以下方法在模板中呈现它:

{{ text_list|join:"<br>"}}

/n 将保留在您的文本中,因此您仍然可以将其用于正则表达式等...

于 2013-03-21T18:31:40.727 回答
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

于 2014-09-07T18:59:45.600 回答