Django扩展模板

时间:2017-02-13 11:21:58

标签: html django django-templates django-views

我还是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 %}

问题:当我登录测试用户时,home.html显示了我想要的界面设计,因为包含了bodyTemplate.css。但是当我按下一个链接到apply.html的按钮时,它会显示一个白色的页面,上面有空的样式字样,没有按钮。

1 个答案:

答案 0 :(得分: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 doc(unclosed head,no body),或者不止一次,这意味着你将拥有同一个css的链接数量,并且仍然一个无效的HTML文档。