3

フォームの検証後、テキストエリアの最初の行が失われます。

テキストエリアが表示される結果ページは、ユーザーがデータを入力するページと同じビューとテンプレートに対応しています。つまり、ページは同じです。

私のコードでは、次のようなものがあります。

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」リクエストごとに、投稿されたデータがテキストエリアに表示される結果ページでそのうちの 1 つ(および 1 つだけ) が失われるのは興味深いことです。

誰でも助けることができますか?コードをハックせずに問題を回避するにはどうすればよいですか?

ユーザーが前のページで入力した最初の '\n' 行をすべて textarea に表示したいと思います。

もっと

通常、データはクライアントから取得されます。ビューに「値」を出力すると、改行が欠落していません。問題は、テンプレートでさらに表示することです。

環境: Windows、Firefox/Opera。

4

3 に答える 3

1

これは Django 固有のものですか?

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

通常の .html ファイルとして保存すると、ブラウザに改行が 1 つしかありません。ブラウザーは、最初の改行を値の一部ではなく、単なる「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

以下のコードを試してみてください。同様の問題に直面しました。これが解決方法です。

<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 に答える
0

ブラウザーは /n を html のテキストをレンダリングする新しい行として無視すると思いましたか? html の使用

<br>

新しい行のために。テキストのブロックをレンダリングするには、データの各行が新しいリスト項目であるリストとしてフォームに含めることができます。次に、次を使用してテンプレートでレンダリングします。

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

/n はテキストに保持されるため、正規表現などに引き続き使用できます...

于 2013-03-21T18:31:40.727 に答える