3

モデル:

Field('text1', type='text', length=1000, notnull=True)

関数:

def textinput():
f=SQLFORM(db.example, fields=['text1'])
if f.accepts(request.vars, session):
return dict(form=f)

「text1」フィールドを適切な行間/書式で表示できるようにしたいと考えています。ユーザーがフォームで [enter] キーを押して新しい行またはまったく新しい段落を開始した場合、これをビューに反映させたいと思います。

たとえば、ユーザーが次のように SQLFORM に入力するとします。

This is a paragraph. Blah blah blah blah blah blah blah.
Blah blah blah blah blah blah blah blah blah.
Blah blah blah blah.

This is another paragraph. Blah blah blah blah blah.
Blah blah blah blah blah.

すべてを隙間なく詰め込むのではなく、ビューのように正確に表示したいのです。どうすればこれを行うことができますか?.replace メソッドを使用して、すべての [enter] キーストロークを改行に置き換えることを考えていましたが、その方法がわかりません。Google で検索しましたが、正確な問題が見つかりません。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

5

最も簡単な方法は、テキストを<pre>タグで囲み、CSS を使用してスタイルを制御することです。改行 ('\n') を<br />タグに置き換えることもできます。読み取り専用 SQLFORM、Crud 読み取りフォーム、SQLTABLE、または SQLFORM.grid を介してテキストを表示する場合、フィールドの「represent」属性を設定して表示を制御できます。

使用<pre>:

Field('text1', type='text', length=1000, notnull=True,
    represent=lambda text, row: PRE(text))

改行置換の使用:

Field('text1', type='text', length=1000, notnull=True,
    represent=lambda text, row: XML(text.replace('\n', '<br />'),
        sanitize=True, permitted_tags=['br/']))

テキストを手動でビューに挿入する場合は、上記のいずれかの方法をビューで直接使用するだけです。例えば:

{{=PRE(row.text1)}}

ブラウザは通常<pre>、固定幅フォントのタグでテキストを表示することに注意してください。それを望まない場合は、CSS を使用してフォントを変更する必要があります。

于 2012-05-14T13:21:42.867 に答える