文本字段和字符字段渲染去掉额外空白(Django/Python)
我注意到我的模板在显示 model.CharField 和 model.TextField 的时候,没有多余的空白。
比如说,如果我输入的数据是...
This is a test
to see what happens.
那么显示出来的内容就会是...
This is a test to see what happens.
这是 Django 的一个特性吗?还是我在某个地方漏掉了什么过滤器或参数?
我用一些调试代码检查了字段(打印 object.field),发现里面确实有多余的空白,所以问题出在显示的那一部分。
我该怎么做才能让用户在 TextFields 中输入段落数据呢?怎样才能保留用户输入的空白呢?
1 个回答
正如你在StackOverflow上看到的,你输入的空格并没有显示出来,这个问题来自于你提问的源代码:
This is a test
to see what happens.
在数据库中保存为:
This is a test\n\n\nto see what happens.
在把内容显示为HTML时,你会遇到两个问题:
浏览器会去掉单词之间的多余空格,除非这些空格是在
<pre></pre>
标签之间。换行符会被当作普通文本处理,浏览器不会显示换行,除非它们在
<pre></pre>
标签之间。
对于空格,你可以使用 这样的模板过滤器,把空格替换成它的HTML实体形式:
。
要把数据库中的换行符转换为HTML的换行符,可以使用 linebreaksbr 内置过滤器。例如,如果 {{ foo }}
是: test\nbar
,那么 {{ foo|linebreaksbr }}
将会显示为: test<br />bar
在你的某个应用中创建一个 "templatetags" 文件夹,并在里面放一个
__init__.py
文件。把 这个代码片段 保存,比如放在 someapp/templatetags/replace_tag.py。
在模板中加载这个模板过滤器,用
{% load replace_tag %}
。把 replace 和 linebreaksbr 结合起来,像这样:
{{ foo|linebreaksbr|replace:" "," " }}
你也可以自己创建一个模板过滤器,把文本处理成你需要的HTML。不管怎样,可以参考 自定义模板过滤器的文档,获取完整的信息。