2014-01-13 41 views
2

这是我的基本的HTML网页,其中我的其他HTML页面扩展超出(它被称为base.html文件)的:Django模板 - 如果显示{%块%}标签不能正常工作之前发言?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 

    <head> 
     <title>Django Bookmarks | {% block title %}{% endblock %}</title> 
     <link rel='stylesheet' type='text/css' href='/site_media/css/style.css' /> 
    </head> 

    <body> 

     {% block header %} 
      <p> signed in! </p> 
     {% endblock %} 

     {% block content %}{% endblock %} 

    </body> 

</html> 

现在,这是我的主页。

{% extends "base.html" %} 

{% block title %} Title {% endblock %} 

{% if user.username %} 
{% else %} 
    {% block header %}{% endblock %} 
{% endif %} 

{% block content %} 
    {% if user.username %} 
     <p>Welcome {{ user.username }}.</p> 
    {% else %} 
     <p>Not Signed in</p> 
    {% endif %} 
{% endblock %} 

,你可以看到,我想我的

{% block header %}{% endblock %} 

如果没有用户登录,但如果有用户登录,我想

{% block header %} 
是空的

从base.html文件继承。但是,它不会从base.html文件继承,即使用户已登录。当用户签署的头块不显示。任何想法,为什么?

回答

5

使用block.super

{% block header %} 
    {% if user.username %} 
     {{ block.super }} 
    {% else %} 
     {# empty #} 
    {% endif %} 
{% endblock %} 

根据Django template documentation

如果您需要从父模板获得该块的内容, 的{{ block.super }}变量会做的伎俩。如果 要添加到父块,而不是 的内容完全覆盖它,这非常有用。 .....

+0

编辑:没关系,它的工作原理。谢谢! – user2719875

+0

+1。为了好的解释。 – Khamidulla