day66

参考:http://www.cnblogs.com/liwenzhou/p/7931828.html#autoid-2-3-6

内容回顾
    1. 模板系统(字符串替换)
        1. 语法
            1. 变量相关: {{ name }},{{name|length}},{{name|default:"默认值"}}
            2. 逻辑相关:
                1. if判断
                    {% if a > b %}
                    {% endif %}
                    
                    {% if a > b %}
                    {% else %}
                    {% endif %}
                    
                    {% if a > b %}
                    {% elif %}
                    {% else %}
                    {% endif %}
                2. for循环
                    1. for循环的基本用法:
                        {% for i in name_list %}
                            {{ i }}
                        {% endfor %}
                        
                        {% for i in name_list %}
                            {{ i }}
                        {% empty %}
                            空空如也
                        {% endfor %}
                    
                    2. for循环可用的属性:
                        forloop.counter
                        forloop.counter0
                        forloop.revcounter
                        forloop.revcounter0
                        
                        forloop.first  
                        forloop.last  
                        
                        forloop.parentloop  --> 两层for循环,内层循环引用外层循环
                        
        2. filter
            1. 常用的内置filter
                1. length
                2. filesizeformat       --> 格式化文件大小的
                3. date:'Y-m-d H:i:s'   --> 格式化时间的
                4. slice
                5. safe                 --> XSS攻击(跨站脚本攻击)
                6. truncatechars:20     --> 截取字符,超过的用...表示
                7. default
                    
            2. 自定义的filter
                示例:
                    1. addsb
                    2. addstr
                具体的实现方式:
                    1. 定义阶段
                        1. 在app下面新建一个python的包:templatetags(一定要叫这个名字)
                        2. 在上面的Python包中新建一个Python文件,名字随意
                        3. 在上述python文件中:
                            from django import template
                            
                            # 生成一个注册用的实例
                            register = template.Library()
                            # 定义并注册一个自定义的filter函数
                            @register.filter(name='addsb')
                            def add_sb(arg):
                                return "{} sb".format(arg)   arg即下面的name(管道符|前的内容)
                    2. 调用阶段:
                        1. 在Django的模板文件中,导入刚才新建的python文件
                            {% load py文件名 %}
                        2. 按照filter的语法调用
                            {{ name|addsb }}

====================================================================================================================================

今日内容
    1. 母版和继承
        1. 为什么要有模板和继承:
            把多个页面公用的部分提取出来,放在一个 母版 里面。
            其他的页面只需要 继承 母版就可以了。
        2. 具体使用的步骤:
            1. 把公用的HTML部分提取出来,放到base.html文件中
            2. 在base.html中,通过定义block,把每个页面不同的部分区分出来
            3. 在具体的页面中,先继承母版
            4. 然后block名去指定替换母版中相应的位置
        
        3. 使用母版和继承的注意事项:
            1. {% extends 'base.html' %} --> 母版文件:base.html要加引号
            2. {% extends 'base.html' %}必须放在子页面的第一行!!!
            3. 可以在base.html中定义很多block,通常我们会额外定义page-css和page-js两个块
            4. view.py相应的函数中返回的是对应的子页面文件 不是不是不是 base.html

2. 组件
        {% include 'xxx.html'%}
        
    3. 静态文件的灵活写法
        1.
            {% load static %}
            {% static 'jQuery-3.3.1.js' %}
        2. {% get_static_prefix %}jQuery-3.3.1.js
        
    4. 自定义simple_tag和inclusion_tag

1. 母版和继承

母板

layouts.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</title>
{% block page-css %} {% endblock %}
</head>
<body> <h1>这是母板的标题</h1>
{% block page-main %}
{% endblock %}
<h1>母板底部内容</h1>
{% block page-js %} {% endblock %}
</body>
</html>

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

继承母板

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

{% extends 'layouts.html' %}

块(block)

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

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

{% block page-main %}
<p>世情薄</p>
<p>人情恶</p>
<p>雨送黄昏花易落</p>
{% endblock %}

base.html

其中第一种方法,也可以关注一下。

在不同的html文件下,写块内代码,点击导航条时,导航条激活高亮。

组件

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

{% include 'navbar.html' %}

nav.html

<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">23-218</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="https://v3.bootcss.com/examples/dashboard/#">Dashboard</a></li>
<li><a href="https://v3.bootcss.com/examples/dashboard/#">Settings</a></li>
<li><a href="https://v3.bootcss.com/examples/dashboard/#">Profile</a></li>
<li><a href="https://v3.bootcss.com/examples/dashboard/#">Help</a></li>
</ul>
<form class="navbar-form navbar-right">
<input type="text" class="form-control" placeholder="Search...">
</form>
</div>
</div>
</nav>

add_book.html

效果

page-css、page-js

引用

将以上内容替换base.html中内容

效果:

静态文件相关

{% static %}

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

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

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

这样setting.py中就不一定写成/static/了。 、

simple_tag

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

inclusion_tag

多用于返回html代码片段

results.html

<ul>
{% for choice in results %}
<li>{{ choice }}</li>
{% endfor %}
</ul>

img_test.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--支持移动端适配-->
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body> {% load static %}
{# 图片作为一个变量#}
<img src="{% static '111.jpg' as xiaomao %}" alt="">
<img src="{{ xiaomao }}" alt=""> {#某个文件多处被用到可以存为一个变量#}
<img src="{{ xiaomao }}" alt="">
<img src="{{ xiaomao }}" alt="">
{#三张图片#} {% load mysimpletag %}
{% yimi "yimi" "lalala" "nizhipeng" %} {% show_results 5 %} </body>
</html>

simple_tag,先导入mysimpletage的py文件,{% load mysimpletag %}

再用name="yimi"的方法,调用。

inclusion_tag,再用show_results方法。{% show_results 5 %},将参数5发给show_results函数,处理后data放results中,再传入results.html中,再将results.html这几行代码放在img_test.html中显示。

效果:

Django(母版和继承)的更多相关文章

  1. django 母版与继承

    在子页面的页面最上方使用下面的语法来继承母版. {% extends 'layouts.html' %} 块: 通过在母版中使用{% block xxx %}来定义块.在子页面中通过定义母版中的blo ...

  2. Django:母版、继承、组件、自定义标签

    1.for循环应用 1.1for Variable Description forloop.counter 当前循环的索引值(从1开始) forloop.counter0 当前循环的索引值(从0开始) ...

  3. Python - Django - 母版和继承

    可以把多个页面相同的部分提取出来,放在一个母板里,这些页面只需要继承这个母板就好了 通常会在母板中定义页面专用的 CSS 块和 JS 块,方便子页面替换 定义块: {% block 名字 %} {% ...

  4. Day062--django--模板,母版和继承

    1.MVC和MTV MVC C Controller : 逻辑的控制 M Model : 存取数据 V View : 信息的展示 MTV M : model ORM操作 T: Template 模板 ...

  5. python全栈开发day65-templates:tags、母版和继承、组件、静态文件相关、simple_tag和inclusion_tag

    一.昨日内容回顾 1.MVC和MTV框架 MVC:  model 模型 存写数据   view 视图 给用户展示页面 control 控制器 负责调度 传递指令 MTV: M:model 模型  OR ...

  6. MVC、MTV、FBV、CBV、母版和继承:

    cookie session cookie的定义: 保存在浏览器上的一组组键值对 (请求头) 为什么要有? http协议是无状态,每次的请求之间是相互独立的,没有办法保存状态. Django中操作co ...

  7. django模型的继承

    很多时候,我们都不是从‘一穷二白’开始编写模型的,有时候可以从第三方库中继承,有时候可以从以前的代码中继承,甚至现写一个模型用于被其它模型继承.这样做的好处,我就不赘述了,每个学习Django的人都非 ...

  8. Django的Model继承abstract,proxy,managed。。。

    Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库:还是让父 model 只包含基本的公共信息,而这些信息只能由 ...

  9. django -- 母版继承

    csrf_token 在之前我们提交post请求的时候,都是在setting.py文件里注释掉了 'django.middleware.csrf.CsrfViewMiddleware' 这一行,这是因 ...

随机推荐

  1. Java在dos界面运行java源文件编译成功,但运行虚拟机时出现错误:“找不到或无法加载主类”的问题

    (一)首先检查环境变量配置有没有问题, 1PATH为%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 2CLASSSPATH为.;%JAVA_HOME%\lib\dt.jar; ...

  2. 【WebService】WebService之WSDL文档深入分析(三)

    WSDL概念 WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问. ...

  3. python学习 day2 (3月2日)

    .if if else 和 if elif else 的区别是: 前者 判断第一个 判断完第二个 之后还会执行else: 后者是只有满足条件(即都不符合if.elif里的条件时才会进入else) 不清 ...

  4. 透过摩拜和ofo,看产品从0到1时如何取舍需求(转)

    大纲 背景介绍 从0至1,我们成功的关键是什么? 从0到1,我们为什么选择做?又为什么选择不做? 从0到1,我们面临什么选择?我们作出了什么选择? 从0到1,我们为什么作出了这种选择? 背景 在资本注 ...

  5. js文件中获取${pageContext.request.contextPath}

    一般从 JSP文件中,可以直接使用 ${pageContext.request.contextPath}非常方便的获得当前页面的路径,用来处理被 Apache2代理之后出现 URL变化的问题,比如增加 ...

  6. 苹果电脑thunderbolt连接两台电脑启动方法

    thunderbolt:首先连接连台电脑 然后开启可以启动的电脑, 关闭无法启动的电脑. 接着 按一下法启动的电脑电源—> 然后按t键 会在另外一台可以启动的电脑上出现,无法启动电脑的磁盘. 就 ...

  7. C语言常用数据类型说明

     1.取值范围: short一般占两个字节,取值范围:-32768 - 32767   int一般占两个或四个字节,取值范围:-2147483648 - 2147483647 unsigned int ...

  8. mysql学习之路_乱码问题

    中文数据问题: 中文数据问题本质就说字符集问题, 计算机只识别二进制,人类识别符号:需要友谊个二进制与字符对应关系(字符集). 报错:服务器没有识别对应的四个字节. 服务器认为的数据是utf—8,一个 ...

  9. Event.target和Event.currentTarget的区别

    <style> * { margin:0; padding:0; list-style:none; } #ul { width:400px; height:250px; margin:0 ...

  10. python处理中文

    python 清洗中文文件 需要用到的两个链接: 1,unicode编码转换器 http://www.bangnishouji.com/tools/chtounicode.html 2,Python匹 ...