Django模板去除空格?

2024-05-15 01:04:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Django模板和CharField模型有问题。

所以我有一个带字符域的模型,它创建了一个用下划线替换空格的slug。如果我创建了一个对象Somename somelash,这将创建slugSomename\u somelash并按预期在模板上显示。

但是,如果我创建一个对象,就会创建一个名为Somename的对象(注意第二个空格),slugSomename\uu Somename,尽管在Django控制台上我将其视为<Object: Somename Somesurname>,但在模板上它显示为Somename Somename。

那么Django模板会以某种方式去掉空格吗?是否有一个过滤器可以用来获取带有空格的名称?


Tags: 对象django模型模板object方式字符charfield
3条回答

首先让我说@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)

有关模板过滤器如何工作以及如何安装它们的说明,check out the docs

有一个内置的模板标记无空格

{% spaceless %}
    <p>
        <a href="foo/">Foo</a>
    </p>
{% endspaceless %}

结果是:

<p><a href="foo/">Foo</a></p>

在djangodocumentation中阅读更多内容。

Django认为对象在内部有两个空格(根据repr输出中的两个下划线和两个空格判断)。它在模板中只显示一个空格,这就是HTML的工作原理。注意,在你刚才问的问题中,大多数你进入两个空格的地方,只有一个出现了?

HTML4 Spec

In particular, user agents should collapse input white space sequences when producing output inter-word space.

正如S.Lott所建议的,你可以通过添加调试日志,或者使用Firefox的Firebug插件或类似的东西来验证我的猜测是否正确,以查看到底有什么东西被发送到浏览器。那你就知道问题出在哪一头了。

如果多个空格对您来说真的很重要,那么您需要使用&nbsp;实体,尽管我不知道如何让Django使用它们对特定对象的输出进行编码。

相关问题 更多 >

    热门问题