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 来控制样式。<br />您还可以用标签替换换行符 ('\n') 。如果您通过只读 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 回答