Django 基础 4

8 template俩大功能 
9.1 模板继承 
9.2 simple_tag 

静态文件

网站使用js,css和image都是属于静态文件

1)在项目下创建静态文件目录static 并在下面创建js,css和images目录

bafbfca18937ac6c6ce6027793c77fb170f.jpg

 

2)在settings.py设置静态文件所在的目录路径

STATIC_URL = '/static/'

STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')] ##设置静态文件目录路径

 

在HTML页面上可以使用标签{% load staticfiles %}加载路径和{% static '路径' %}来动态获得static路径

 

<!DOCTYPE html>

{% load staticfiles %} {# 加载static路径 #}

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

<img src="{% static 'images/1.jpg' %}"> {# 动态获取static目录路径 #}

</body>

</html>

 

过滤器

过滤器是用于对模板变量进行操作

格式:{{ 模板变量 | 过滤器 : 参数 }}

 

date 更改日期格式

length 求字符串,列表的长度 

default 设置模板变量的默认值 当该变量为False返回默认值

 

更多的模板标签和过滤器及参数可参考官方文档 https://docs.djangoproject.com/zh-hans/2.1/ref/templates/builtins/

 

自定义过滤器

当Django框架自带的过滤器不能满足你的需求时,可以自定义过滤器。

1)在应用目录下,创建templatetags(名字固定)的Python包,并创建Python文件(名字任意)

8c4c9e213d4293a37797a3fa362803a4cb1.jpg

 

2)在Python文件创建对应的过滤器函数

自定义过滤器就是自定义函数。

可以继承两种方式 

1)@register.filter它至少有一个参数,最多两个参数。可以在for ,if中使用过滤器 

2)@register.simple_tag能传多个参数,但不能在for ,if中使用 调用 {% 过滤器名 参数1 参数2 ... %}

要使用Library类的filter方法来装饰自定义函数 在使用自定义过滤器先要使用{% load 过滤器文件名 %}

 

filter.py

 

from django.template import Library #该类用于装饰你的过滤器

register = Library() #实例化 名字固定

#该对象的filter方法让我们函数变为自定义过滤器

@register.filter

def mod(num):

    #判断num是否为偶数

    return num%2 == 0

 

@register.filter

def mod_val(num,val):

    #判断num是否能给val整除

    return num%val == 0

 

index.html

 

<!DOCTYPE html>

<html lang="en">

{% load filter %} {# 加载自定义过滤器的文件 #}

<head>

    <meta charset="UTF-8">

    <title>图书信息</title>

</head>

<body>

<a href="/create">新增</a>

<ul>

 

    {% for book in books %}

        {% if book.id|mod_val:3 %} {# 把book.id作为参数给自定义的过滤器 #}

               <li>{{ book.btitle }}--{{ book.id }}--<a href="/delete{{ book.id }}">删除</a></li>

        {% endif %}

    {% endfor %}

</ul>

</body>

</html>

 

模板继承

多个相同部分的页面,为了减少代码块的使用,可以使用模板继承。

 

609ad3ae0f1bdf9715d76b29ae2d2eca94c.jpg

 

父模板中可以定义块预留位置

{% block 块名 %}

    内容可写,也可不写

{% endblock 块名 %}

 

子模板继承父模板,也可以重写模板中块的内容 在块中可以使用{{ block.super }}来获取父模板中的块内容

{% extends 父模板路径 %}

 

{% block 块名 %}

    内容重写

{% endblock 块名 %}

 

父模板base.html

 

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>{% block title %}父模板{% endblock title %}</title>

</head>

<body>

<h1>导航条</h1>

{% block b1 %}

    <h4>父模板内容</h4>

{% endblock b1 %}

<h1>底部</h1>

</body>

</html>

 

子模板child.py

 

{% extends 'booktest/base.html' %} {# 继承父模板 路径相对于templaes目录 #}

{% block title %}子模板{% endblock title %} {# 更改标题块 #}

 

{% block b1 %} {# 更改b1块 #}

    {{ block.super }}  {# 获取父模板b1块中的内容 #}

    <h4>子模板内容</h4>

{% endblock b1 %}

转载于:https://my.oschina.net/u/3803568/blog/2991281

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值