2013-03-21 54 views
3

表單驗證後,我的textarea丟失了第一行。爲什麼在'POST'或'GET'請求之後在django模板中缺少'新行'?

顯示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。

+1

你有看呈現的HTML?那裏有沒有線索可以表明價值是如何呈現的? – cdhowie 2013-03-21 17:52:32

+0

即使第一行不是換行符,這是否會發生? – 2013-03-21 17:55:17

+0

@cdhowie如果我在視圖中爲視圖上下文變量賦值'\ n \ r \ n \ r',那麼我有2個新行。如果我設置'\ n \ n',那麼只有一個。這是一個線索嗎? – sergzach 2013-03-21 17:58:43

回答

1

你確定這是Django特有的嗎?

<html> 
<body> 
<textarea>`[CR]LF` 
`[CR]LF` 
test</textarea>  
</body> 
</html> 

保存爲正常.html文件時,在瀏覽器中只有一個換行符。瀏覽器將第一個換行符作爲「HTML代碼格式化」,而不是該值的一部分。

編輯

您應該能夠通過modifiying模板像這樣來解決這個問題:

<textarea name='value'> 
{{value}}</textarea> 
<!-- It's a template for a result page --> 

只有換行符第一的(顯示在箱子後,也就是說,如果你有3個,你得到2,如果你有2,你得到1,如果你有1,你得到0,如果你有0,你會得到0)。這是因爲第一個換行符被瀏覽器作爲標記的一部分使用,所以更改模板以包含第一個換行符可以解決您的問題。

+0

謝謝。我不確定這是否是Django特有的。奇怪的是,我發佈了一個textarea內容並在請求後獲取了另一個內容。 – sergzach 2013-03-21 18:10:47

+0

內容相同;你的網頁瀏覽器對它的解釋不同我通過直接用你期望的值替換了上面的例子。 – 2013-03-21 18:16:40

+0

@sergzach在我的編輯中嘗試解決方案。 – 2013-03-21 18:20:23

0

我認爲瀏覽器忽略/ n作爲html中的新行渲染文本? html使用

<br> 

爲換行。要呈現的文本塊,你可以將其包含在這個表單的列表,其中每一行數據是一個新的列表項,然後使用呈現在您的模板:

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

/N將被保留您的文本,所以你仍然可以使用它的正則表達式等...

+0

這是一個textarea,它與預格式化的文本一起使用。字面上輸出'
'。 – 2013-03-21 18:48:08

+0

好的,謝謝,剛剛學到了一些東西! – Ninga 2013-03-21 18:58:41

+0

是的,我也是 - 關於模板標籤中的'join':)很難訪問所以不學習新東西:) – 2013-03-21 19:20:35

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

相關問題