Django模板剥离空格?


问题内容

我在Django模板和CharField模型上遇到麻烦。

因此,我有一个带有CharField的模型,该模型创建了一个用下划线替换空格的子段。如果创建对象Somename
Somesurname,则会创建一个Slug Somename_Somesurname, 并按 预期显示在模板上。

但是,如果我创建一个对象 Somename Somesurname (注意第二个空格), 则会 创建 Slug
Somename__Somesurname
,尽管在Django控制台上我<Object: Somename Somesurname>将其显示为,但在模板上它显示为 Somename Somesurname

那么Django模板会以某种方式剥离空格吗?是否可以使用过滤器获取名称及其空格?


问题答案:

首先,我要说@DNS的答案是正确的,为什么空格没有显示出来。

考虑到这一点,此模板过滤器会将字符串中的所有空格替换为 &nbsp;

用法:

{{ "hey there  world"|spacify }}

输出将是 hey&nbsp;there&nbsp;&nbsp;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)

有关模板过滤器如何工作以及如何安装的注释,请参阅docs