• Django 之母板


    ---恢复内容开始---

    母板

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Title</title>
      {% block page-css %}
      
      {% endblock %}
    </head>
    <body>
    
    <h1>这是母板的标题</h1>
    
    {% block page-main %}
    
    {% endblock %}
    <h1>母板底部内容</h1>
    {% block page-js %}
    
    {% endblock %}
    </body>
    </html>

    注意:我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。

    继承母板

    在子页面中在页面最上方使用下面的语法来继承母板。

    {% extends "base.html"%}

    例子:

    只换掉右侧内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>母板</title>
        <style>
            *{
                padding: 0;
                margin: 0;
            }
            .head{
                height: 50px;
                 100%;
                background-color: deepskyblue;
            }
            .left{
                height: 1000px;
                 20%;
                background-color: darkgrey;
                float: left;
            }
        </style>
    
    </head>
    <body>
    <div class="head">这是导航条</div>
    <div class="left">这是左侧菜单</div>
    
    {# 母板是变的:右侧内容#}
    {% block page_content%}
    {% endblock %}
    
    </body>
    </html>
    共有的页面
    {% extends 'base.html' %}
    {#首先继承母板#}
    {# extends 一定要放在最上面#}
    
    
    {% block page_content %}
        <table border="1px">
            <thead>
            <tr>
                <th>#</th>
                <th>name</th>
                <th>age</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td>1</td>
                <td>jassin</td>
                <td>21</td>
            </tr>
            <tr>
                <td>2</td>
                <td>lishi</td>
                <td>21</td>
            </tr>
                    <tr>
                <td>3</td>
                <td>dandan</td>
                <td>35</td>
            </tr>
            </tbody>
    
        </table>
    
    {% endblock %}
    studen_list,学生表
    {% extends "base.html"%}
    {# 此处引用注意加引号#}
    
    {% block page_content %}
        <ul type="none" style="padding: 100px">
            <li>迷</li>
            <li>失</li>
            <li>归</li>
            <li>途</li>
            <li>的</li>
            <li>方</li>
            <li>向</li>
        </ul>
    {% endblock %}
    不知道什么表
    # views。py
    def student_list(request):
        return render(request, "student_list.html")
    
    def teacher_list(request):
        return render(request,"teacher_list.html")
    
    
    # urls。py
        url(r'^student_list/$',views.student_list),
        url(r'^teacher_list/$',views.teacher_list),
    配置

    块(block)

    通过在母板中使用{% block  xxx %}来定义"块"。

    在子页面中通过定义母板中的block名来对应替换母板中相应的内容。

    {% block page_content %}
        <ul type="none">
            <li>迷</li>
            <li>失</li>
            <li>归</li>
            <li>途</li>
            <li>的</li>
            <li>方</li>
            <li>向</li>
        </ul>
    {% endblock %}
            把所有页面共用的部分 提取出来 放到母版里面
            
            母版里面通过定义 block ,
            
            通常模板里面为子页面单独定义
                {% block page_css %}{% endblock %}  --> 子页面才用到的CSS文件
                {% block page_js %}{% endblock %}   --> 子页面采用到的JS文件
            
            子页面
                继承 {% extends "base.html" %}  --》 一定要放在子页面的最上面
                
                {% block page_content %}
                    我子页面才有的内容
                {% endblock %}

    组件

    可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。(导入组件)

    {% include 'navbar.html' %}

     静态文件相关(实现动态)

    在setting.py 中
    STATIC_URL = '/static/' 的static是可以改变
    
    # 所以我们也要把他实现为动态传.
    
    首先需要先 {% load static %}  导入
    
    然后使用 
    
    例如 
    <img src="/static/images/hi.jpg" alt="Hi!">   # 这个已经写死
    
    <img src"{% static "images/hi.jpg" %}" alt="Hi!" /> 实现动态
    
    此处static 已经将static 导入,与 STATIC_URL = '/static/' 的static别名无关

    引用JS文件时使用:

    {% load static %}
    <script src="{% static "mytest.js" %}"></script>

    某个文件多处被用到可以存为一个变量

    {% load static %}
    {% static "images/hi.jpg" as myphoto %}
    <img src="{{ myphoto }}"></img>

     使用get_static_prefix(起别名)

    {% load static %}
    <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />

    或者

    {% load static %}
    {% get_static_prefix as STATIC_PREFIX %}
    
    <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
    <img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />

    自定义simpletag(未讲)

    和自定义filter类似,只不过接收更灵活的参数。

    定义注册simple tag

    @register.simple_tag(name="plus")
    def plus(a, b, c):
        return "{} + {} + {}".format(a, b, c)

    使用自定义simple tag

    {% load app01_demo %}
    
    {# simple tag #}
    {% plus "1" "2" "abc" %}
  • 相关阅读:
    认证-权限-频率组件
    视图组件
    序列化类
    解析模块
    异常模块
    响应模块分析
    请求模块分析
    cbv请求分析
    django中的restful规范
    web接口与restful规范
  • 原文地址:https://www.cnblogs.com/jassin-du/p/8318106.html
Copyright © 2020-2023  润新知