• 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" %}
  • 相关阅读:
    浅析深度优先和广度优先遍历实现过程、区别及使用场景
    浅析为什么要用setTimeout模拟setInterval
    app弹出软键盘获取键盘高度不准确的原因及导致底部定位的元素无法贴近键盘的问题
    App平台iOS设备上因内存不足导致白屏、闪退的原因及其解决方案
    浅谈移动端开发技术
    浅析Console命令调试常用方法
    js正则表达式中的正向肯定预查和正向否定预查, 反向肯定和反向否定(这个翻译不准确)
    javascript的版本查看及js的历史
    【转】JS-正则表达式的反向引用
    【转】Linux虚拟网络设备之tun/tap
  • 原文地址:https://www.cnblogs.com/jassin-du/p/8318106.html
Copyright © 2020-2023  润新知