PythonTip >> 博文 >> Django

Django中模板架构

zihua 2014-03-10 18:03:20 点击: 832 | 收藏


在阅读完An Architecture for Django Templates后的一些笔记

1. 将模板进行分类,主要有三类:

A, 被继承的模板,以__开头进行命名; 

    如,__base.html这个是最基本的模板,将被A、C类模板继承

{% load staticfiles i18n %}
<!DOCTYPE html>
<html>
    <head>
        {% block meta %}{% endblock %}
        <title>
            {% block title %}{% trans "Alazyer' Website" %}{% endblock %}
        </title>
        {% block stylesheets %}
            <link rel="stylesheet" href="{% static "css/bootstrap.min.css" %}" type="text/css" />
            <link rel="stylesheet" href="{% static "css/base.css" %}" type="text/css" />
        {% endblock %}
        {% block extra_head %}{% endblock %}
    </head>
    <body>
        <header class="navbar navbar-fixed-top">
            {% include "_navigation.html" %}
        </header>
        <div id="main" role="main">
            <div class="container">
                {% block main %}
                {% endblock %}
            </div>
        </div>
        {% block javascript %}
            <script src="{% static "js/jquery-1.7.2.min.js" %}" type="text/javascript"></script>
            <script src="{% static "js/bootstrap.min.js" %}" type="text/javascript"></script>
        {% endblock %}
    </body>
</html>

    或者是网页布局相关的模板,如__1_right_sidebar.html,这样可以很容易调整网页布局,比如左右比例由2:1,调整到3:1,只需要对span值由8:4,调整为9:3即可。同样可以有__1_right_sidebar.html, __1_sigle_section.html

{% extends '__base.html' %}
{% block main %}
    <div class="row">
        <div class="span8">
            {% block content %}{% endblock %}
        </div>
        <div class=“span4">
            {% block sidebar %}{% endblock %}
        </div>
    </div>
{% endblock %}

B, 被包含的模板,以_开头进行命名;

    如上文中提到的_navigation.html

<div class="navbar-inner">
    <div class="container-fluid">
        <a class="brand" href="#">Alazyer's Website</a>
        <div class="nav-collapse collapse">
            <ul class="nav">
                 <li class="active"><a href="{% url 'home' %}">Home</a></li>
                 <li class="dropdown">
                     <a href="#" class="dropdown-toggle" data-toggle="dropdown">Applications <b class="caret"></b></a>
                     <ul class="dropdown-menu">
                         <li><a href="{% url 'blog:index' %}">Blog</a></li>
                         <li><a href="{% url 'depot:index' %}">Depot</a></li>
                         <li><a href="{% url 'polls:index' %}">Polls</a></li>
                     </ul>
                 </li>
                 <li><a href="{% url 'about' %}">About</a></li>
                 <li><a href="{% url 'contact' %}">Contact</a></li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="{% url 'login' %}">Login</a></li>
                <li><a href="{% url 'register' %}">Register</a></li>
            </ul>
         </div>
    </div>
</div>

C, 展示内容的模板;

    如具体的展示blog中一篇entry的entry.html模板

{% extends '__1_right_sidebar' %}
{% block title %}
    {{ entry.title }}
{% endblock %}
{% block content %}
    {% include '_entry_full.html' %}
{% endblock %}

{% block sidebar %}
    {% include '_tags.html' with tags=entry.tags.all %}
    {% enclude '_categories.html' with categories=entry.categories.all %}
{% endblock %}

2. 其他知识

{{ block.supper }},在继承模板中使用母模板中内容

显示的闭合标签,如下。但是个人觉得没有必要

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

将html标签和模板标签同等对待。



原文链接:http://my.oschina.net/alazyer/blog/206657

作者:zihua | 分类: Django | 标签: django | 阅读: 832 | 发布于: 2014-03-10 18时 |