models.TextField() 中的换行符未在模板中呈现

Posted

技术标签:

【中文标题】models.TextField() 中的换行符未在模板中呈现【英文标题】:newline in models.TextField() not rendered in template 【发布时间】:2012-05-03 11:52:32 【问题描述】:

我有一个带有属性的模型,

desc = models.TextField()

我使用 Django 提供的管理界面输入数据,然后查看了我的模板,其中获取并显示了数据库值。

在我的管理界面中,我留下了换行符(只是在我的段落之间留下空白行),但它们在我的模板中显示为单个段落。

我正在使用 Django 1.3 和 mysql

【问题讨论】:

【参考方案1】:

linebreaks

用适当的 html 替换纯文本中的换行符;单个换行符成为 HTML 换行符 (<br />),新行后跟一个空行成为段落换行符 (</p>)。

例如:

value|linebreaks

【讨论】:

这适用于渲染,但如果您想为 javascript、输入值或电子邮件保留 \n 怎么办? 嗨,我也在找同样的东西,我有一个带有文本字段的模型和相应的管理类,我不知道把这个放在哪里???我们是否需要覆盖 html 并为其创建模板??? @Mike 忘了把嘴伸进这个***.com/a/1894945 如此简单的解决方案!也适用于 DetailView。【参考方案2】:

请注意,我遇到了类似的问题,换行符没有显示,我意识到当 TextField 被声明为只读时,文本会被 HTML 段落标签包裹:

<p> text </p>

相对于前置标签:

<pre> text </pre>

Pre 标记保留新的行空间,因此如果您不将该字段设为只读,您将看到这些行空间。

【讨论】:

【参考方案3】:

约翰,看起来你从伊格纳西奥那里得到了很好的回答。我只是想指出我为那些可能感到困惑的人(就像我一样)使用伊格纳西奥的答案所采取的步骤。在我显示文本字段的模板中,我在模板字段名称后面添加了“|linebreaks”(在我的例子中是“job.desc”):

<ul>
    % for job in varDataObject %
    <li>
        <h4>
            <a href="#" onclick='funPath("Job",  job.id )'> job.title  </a>
        </h4>
        Description:  job.desc|linebreaks 

【讨论】:

这个答案可能是对伊格纳西奥的回答的评论 感谢 caulitomaz!我该如何修复这种情况?【参考方案4】:

使用 sql 在模型的 TextField() 中使用换行符(不是 \n)保存文本:

update event
set description='xyz
                asdasd
                 oaisjd '
where id=1;

在 Django 模板中:

 object.description|linebreaks 

【讨论】:

以上是关于models.TextField() 中的换行符未在模板中呈现的主要内容,如果未能解决你的问题,请参考以下文章

Django:在保存之前更改 TextField

让 Django 仅返回存储为 models.TextField() 的文本的前 50 个字符

Django中的模型设计

Django 过滤器图标在 TextField() 上计数缓慢

让 Django 为 TextField 而不是 textarea 构建 contenteditable div

查看详细信息中的外键