为啥django在扩展后生成空字符串?

Posted

技术标签:

【中文标题】为啥django在扩展后生成空字符串?【英文标题】:Why django generates empty string after extend?为什么django在扩展后生成空字符串? 【发布时间】:2012-03-15 15:48:58 【问题描述】:

我的基本模板是

<!DOCTYPE html>
<html lang="en">
<head>    
    <title>% block title %My amazing site% endblock %</title>
</head>

<body>
    <div id="sidebar">
        % block sidebar %
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
        % endblock %
    </div>

    <div id="content">
        % block content %% endblock %
    </div>
</body>
</html>

索引页面:

% extends "base.html" %

% block title %My amazing blog% endblock %

% block content %
% for entry in blog_entries %
    <h2> entry.title </h2>
    <p> entry.body </p>
% endfor %
% endblock %

这有什么问题,为什么会在这些引号内生成奇怪的空文本? 它正在影响我的布局。你有什么想法?谢谢。

【问题讨论】:

【参考方案1】:

终于!!!我找到了造成这种情况的原因。我使用 Notepad++ 并编码为

UTF-8

但我应该编码为

不带 BOM 的 UTF-8

还是谢谢大家。

【讨论】:

【参考方案2】:

使用Ctrl+U 打开的源代码看起来也很奇怪吗?也许是 Chrome 搞砸了 Elements 预览,因为我已经在 Django 1.2.3 上创建了一个视图来呈现这两个模板(并添加 2 个虚拟博客条目),并且它正确呈现为:

<!DOCTYPE html> 
<html lang="en"> 
<head>    
    <title>My amazing blog</title> 
</head> 

<body> 
    <div id="sidebar"> 

        <ul> 
            <li><a href="/">Home</a></li> 
            <li><a href="/blog/">Blog</a></li> 
        </ul> 

    </div> 

    <div id="content"> 


    <h2>Test 1</h2> 
    <p>blah blah</p> 

    <h2>Test 2</h2> 
    <p>blah blah</p> 


    </div> 
</body> 
</html> 

【讨论】:

你说得对,源代码生成正确,但 Chrome 搞砸了。当我尝试用黑色(例如)颜色渲染标题时,我在标题之前得到了很小的边距。当我在“检查元素”选项卡中删除这个空字符串时,这个边距消失了。【参考方案3】:

这不可能是模板组合的结果,因为在您的“base.html”模板中,% block title % 在部分之间,但在您生成的 html 中,它在部分中。还有一个 CSS 链接,在任何一个和部分之外。我有很多这样的空字符串,这不会影响我的布局,我认为问题在于你在部分之外。

【讨论】:

【参考方案4】:

注意您的标题标签已插入正文标签。也许从这里开始搜索?

【讨论】:

你确定模板 index.html 扩展了正确的 base.html 吗? 是的,只有两个文件,生成的 html 是由这两个文件组合而成的。

以上是关于为啥django在扩展后生成空字符串?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在反应形式中将空字符串设置为 null 变成空字符串

Django CharField 不默认为空字符串

为啥替换在空字符串上不返回任何内容

为啥 Perl 使用空字符串来表示 boolean false 值?

Django 查询返回空字符串

为啥假值输出为空字符串? [复制]