渲染textfield和charfield扼杀额外的空格(Django/Python)

pow*_*wlo 5 python django rendering textfield

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

例如,如果我输入数据,如...

This     is a           test


to see what  happens.
Run Code Online (Sandbox Code Playgroud)

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

This is a test to see what happens.
Run Code Online (Sandbox Code Playgroud)

这是Django的故意特征还是我错过了某些过滤器或参数?

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

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

jpi*_*pic 13

正如您在StackOverflow中看到的那样,您的空间不会显示,这来自您的问题的来源:

This     is a           test


to see what  happens.
Run Code Online (Sandbox Code Playgroud)

将保存在数据库中:

This     is a           test\n\n\nto see what  happens.
Run Code Online (Sandbox Code Playgroud)

渲染为html时遇到问题:

  1. 除非<pre></pre>标签位于标签之间,否则浏览器会显示单词之间的额外空格

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

对于空格,您可以使用这样的模板过滤器将它们替换为等效的html实体:&nbsp;.

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

  1. 在某些应用中创建一个"templatetags"文件夹,其中包含一个__init__.py文件.

  2. 例如,在someapp/templatetags/replace_tag.py中保存代码段

  3. 像这样在模板中加载模板过滤器{% load replace_tag %}

  4. 将replace和linebreaksbr结合起来:{{ foo|linebreaksbr|replace:" ","&nbsp;" }}

您还可以创建自己的模板过滤器,将文本处理为您需要的HTML.在任何情况下,请参阅自定义模板筛选器文档以获取完整信息.