2017-02-13 182 views
0

我对Django仍然很陌生。Django扩展模板

我有4个HTML文件:header.html中(每一页通用报头),body.html(负载必要的CSS文件,并根据用户的角色生成导航按钮),home.html做为和apply.html

以下是我想要做的: 1)body.html的header.html(每个页面的通用标题)parent。 2)的home.html的body.html家长和apply.html

这里是我的了header.html代码:

<!DOCTYPE html> 
<html> 
{% load staticfiles %} 
<head> 
    <link rel="shortcut icon" href="{% static "favicon.ico" %}"/> 
    <link rel="stylesheet" href="{% static 'loginTemplate.css' %}" /> 
{% block body %}{% endblock %} 
{% block content %}{% endblock %} 

这是我在body.html代码:

{% extends "header.html" %} 
{% block body %} 
{% for role in roles %} 
{% load staticfiles %} 
<link rel="stylesheet" href="{% static 'bodyTemplate.css' %}"/> 
</head> 
<body> 
<div><!--place my button here</div> 
{% endfor %} 
{% endblock %} 

这是我在Home.html中和apply.html代码:

{% extends "body.html" %} 
{% block content %} 
<div>load user detail<div> 
{% endblock %} 

问题:当我登录到我的测试用户,家庭。 html显示了我想要的接口设计,因为包含了bodyTemplate.css。但是当我按下一个链接到apply.html的按钮时,它向我展示了一个空白样式文字和没有按钮的白页。

+0

您的“应用”视图是否设置了任何角色? – Sayse

+1

没有。在你提到它之后,我意识到了。然后我做了一些代码检查,这就是为什么页面没有显示像home.html这样的任何按钮的原因之一。 – Ty943

回答

0

这不会直接回答您的问题,但这不是使用模板继承的最佳方式。你想要的是与所有基本HTML布局一个基本模板,即:

# base.html 
<!DOCTYPE html> 
<html> 
{% load staticfiles %} 
<head> 
    <link rel="shortcut icon" href="{% static "favicon.ico" %}"/> 
    <link rel="stylesheet" href="{% static 'loginTemplate.css' %}" /> 
    {% block extra-head %} 
    {# you can add any page-specific additional headers here #} 
    {% endblock %} 
</head> 
<body> 
{% block content %} 
{# now you can have various "layout" subtemplates hooking into 'body' #} 
{% endblock %} 
</body> 
</html> 

还要注意的是,在你的代码中有这样的:

{% block body %} 
{% for role in roles %} 
    {% load staticfiles %} 
    <link rel="stylesheet" href="{% static 'bodyTemplate.css' %}"/> 
    </head> 

<body> 
    <div><!--place my button here</div> 
{% endfor %} 
{% endblock %} 

将实际关闭head标签和打开body标签的时间与您在roles中的项数一样多...可以为零(如果“角色”为空或在当前上下文中未定义),这意味着您不会拥有bodyTemplate.css和无效的html文档(不封闭的头部,没有身体),或不止一次,这意味着你会h尽可能多的链接到相同的CSS,仍然是一个无效的HTML文档。

+0

嗨,谢谢你的回答。事实上,它确实有助于解决问题,即使这不是非常直接的方式现在我可以看到我的错误在哪里。是的,我同意不是使用模板继承的最佳方式。这样做的原因是我为我的登录页面使用了header.html,所以我不需要为1页创建额外的模板。除了登录页面之外,像home.html这样的页面将需要用户按钮。谢谢你指出我的业余编码。有了这个,我发现为什么apply.html不打印出按钮,因为我的角色是空的。在其他页面开发过程中,这会一直提醒我。 – Ty943

+0

保存一个额外的模板真的值得不得不维护一个奇怪而脆弱的模板布局的痛苦?好吧,不是我的问题,但... –

+0

哈哈,不是我的意思是我不介意有额外的1模板。但是,这是我得到代码时得到的结果。所以....我只是将所有这些“奇怪的模板”更改为它应该是的普通模板... – Ty943