我在使用Django模板和CharField模型时遇到了麻烦.
所以我有一个带有CharField的模型,它创建了一个用下划线替换空格的slug.如果我创建一个对象,Somename Somesurname,这将创建slu S Somename_Somesurname并在模板上按预期显示.
但是,如果我创建一个对象,Somename Somesurname(注意第二个空格),就会创建一个Somename__Somesurname,虽然在Django控制台上我看到它
,但在模板上它显示为Somename Somesurname.
那么Django模板是否会以某种方式剥离空间?是否有一个过滤器,我可以使用它的空格来获取名称?
让我先说一下,@ DNS的答案是正确的,为什么空格没有显示.
考虑到这一点,此模板过滤器将替换字符串中的任何空格
用法:
{{ "hey there world"|spacify }}
输出将是 hey there world
这是代码:
from django.template import Library from django.template.defaultfilters import stringfilter from django.utils.html import conditional_escape from django.utils.safestring import mark_safe import re register = Library() @stringfilter def spacify(value, autoescape=None): if autoescape: esc = conditional_escape else: esc = lambda x: x return mark_safe(re.sub('\s', '&'+'nbsp;', esc(value))) spacify.needs_autoescape = True register.filter(spacify)
有关模板过滤器如何工作以及如何安装它们的说明,请查看文档.
Django在内部看到对象有两个空格(由两个下划线和repr
输出中的两个空格判断).它只在模板中显示一个空格这一事实就是HTML的工作原理.请注意,在您刚刚提出的问题中,您进入两个空间的大多数地方,只有一个出现?
来自HTML4规范:
特别是,用户代理应在生成输出字间空间时折叠输入空格序列.
正如S.Lott建议的那样,您可以通过添加调试日志记录,或使用Firefox的Firebug插件或类似内容来验证我的猜测是否正确,以确切了解发送到浏览器的内容.那么你肯定知道问题出在哪一端.
如果多个空格对您来说非常重要,那么您将需要使用该
实体,但我不知道如何让Django使用它们对该特定对象的输出进行编码.
有一个内置的模板标签spaceless
{% spaceless %} {% endspaceless %}
结果如下:
阅读django 文档中的更多内容.