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 仅返回存储为 models.TextField() 的文本的前 50 个字符
Django 过滤器图标在 TextField() 上计数缓慢