当前位置:  开发笔记 > 编程语言 > 正文

Django模板剥离空间?

如何解决《Django模板剥离空间?》经验,为你挑选了3个好方法。

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

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

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

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



1> Paolo Bergan..:

让我先说一下,@ 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)

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



2> DNS..:

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

来自HTML4规范:

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

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

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



3> 小智..:

有一个内置的模板标签spaceless

{% spaceless %}
    

Foo

{% endspaceless %}

结果如下:

Foo

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

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有