Django模板剥离空间?

Mar*_*los 14 python django django-templates

我在使用Django模板和CharField模型时遇到了麻烦.

所以我有一个带有CharField的模型,它创建了一个用下划线替换空格的slug.如果我创建一个对象,Somename Somesurname,这将创建slu S Somename_Somesurname并在模板上按预期显示.

但是,如果我创建一个对象,Somename Somesurname(注意第二个空格),就会创建一个Somename__Somesurname,虽然在Django控制台上我看到它<Object: Somename Somesurname>,但在模板上它显示为Somename Somesurname.

那么Django模板是否会以某种方式剥离空间?是否有一个过滤器,我可以使用它的空格来获取名称?

Pao*_*ino 34

让我先说一下,@ DNS的答案是正确的,为什么空格没有显示.

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

用法:

{{ "hey there  world"|spacify }}
Run Code Online (Sandbox Code Playgroud)

输出将是 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)
Run Code Online (Sandbox Code Playgroud)

有关模板过滤器如何工作以及如何安装它们的说明,请查看文档.


DNS*_*DNS 11

Django在内部看到对象有两个空格(由两个下划线和repr输出中的两个空格判断).它只在模板中显示一个空格这一事实就是HTML的工作原理.请注意,在您刚刚提出的问题中,您进入两个空间的大多数地方,只有一个出现?

来自HTML4规范:

特别是,用户代理应在生成输出字间空间时折叠输入空格序列.

正如S.Lott建议的那样,您可以通过添加调试日志记录,或使用Firefox的Firebug插件或类似内容来验证我的猜测是否正确,以确切了解发送到浏览器的内容.那么你肯定知道问题出在哪一端.

如果多个空格对您来说非常重要,那么您将需要使用该&nbsp;实体,但我不知道如何让Django使用它们对该特定对象的输出进行编码.


JNL*_*NLK 6

有一个内置的模板标签spaceless

{% spaceless %}
    <p>
        <a href="foo/">Foo</a>
    </p>
{% endspaceless %}
Run Code Online (Sandbox Code Playgroud)

结果如下:

<p><a href="foo/">Foo</a></p>
Run Code Online (Sandbox Code Playgroud)

阅读django 文档中的更多内容.