【问题标题】:rendering of textfield and charfield chomps out extra whitespace (Django/Python)textfield 和 charfield 的渲染消除了额外的空格(Django/Python)
【发布时间】:2012-02-24 02:34:01
【问题描述】:

我注意到我的模板在渲染我的 model.CharField 和 model.TextField 时没有任何多余的空格。

例如,如果我输入诸如...之类的数据

This     is a           test


to see what  happens.

渲染的对象字段将显示为...

This is a test to see what happens.

这是 Django 的有意功能还是我在某处遗漏了一些过滤器或参数?

我已经用一些调试代码(打印 object.field)检查了字段本身,它确实包含额外的空格,所以问题出在渲染方面。

如何允许用户在 TextFields 中输入数据段落?如何保留用户可能输入的空格?

【问题讨论】:

  • 请使用一些 Stackoverflow 标记。目前我们无法理解您的示例代码。

标签: python django rendering textfield


【解决方案1】:

您甚至可以在 StackOverflow 中看到您的空间不显示,这是您问题的来源:

This     is a           test


to see what  happens.

将在数据库中保存为:

This     is a           test\n\n\nto see what  happens.

渲染为html时遇到问题:

  1. 单词之间的多余空格会在浏览器显示时被去除,除非它位于<pre></pre> 标签之间

  2. 换行符将呈现为纯文本换行符,除非在<pre></pre> 标签之间,否则不会显示在浏览器中。

对于空格,您可以使用such a template filter 将它们替换为对应的html 实体: 

要在 HTML 换行符中转换数据库换行符,请使用 linebreaksbr 内置过滤器。例如,如果{{ foo }} 是:test\nbar,那么{{ foo|linebreaksbr }} 将呈现:test<br />bar

  1. 在您的某些应用中创建一个“templatetags”文件夹其中包含 __init__.py 文件。

  2. 保存the snippet 例如在 someapp/templatetags/replace_tag.py

  3. 在模板中加载模板过滤器,如{% load replace_tag %}

  4. 将替换和换行符组合起来{{ foo|linebreaksbr|replace:" "," " }}

您还可以制作自己的模板过滤器,将文本处理成您需要的 HTML。在任何情况下,请参阅custom template filter documentation 以获取完整信息。

【讨论】:

  • 很好的答案,非常感谢!我认为 linebreaksbr 过滤器现在就足够了。
  • 我一开始也是这么想的
  • 为了澄清今天和将来阅读的人,
     标签对我来说已经足够了。我想在页面的一部分中显示一些 YAML(并且 YAML 对空格敏感),但它一直被搞砸了。我将该占位符包裹在 
     中,它应该显示出来。
猜你喜欢
  • 2016-12-24
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 2019-09-10
  • 2021-02-04
  • 1970-01-01
相关资源
最近更新 更多