模板

1.模板语言

母板:{% block title %}{% endblock %}

子板:{% extends "master.html" %}  #只能继承一个模板
   {% include 'tag.html' %}    #可以继承多个
   {% block title %}内容{% endblock %}

 2.模板继承

一个html问件只能继承一个模板

master.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        {% block title %}{% endblock %}

    </title>

<link rel="stylesheet" href="/static/commons.css">
    <style>
        .pg-header {
            height: 100px;
            background-color: rebeccapurple;
        }
     {% block css %}{% endblock %}    
    </style>


</head>
<body>


<div class="pg-header">老男孩管理</div>

{% block content %}{% endblock %}

<script src="/static/jquery.js"></script>

{% block js %}{% endblock %}

</body>
</html>
母板语言

test.html继承master.html:

{% extends 'master.html' %}  #要extend母板的html问件

{% block content %}

<h1>用户管理</h1>
    <div class='c1';>
<ul>

        <li>{{ u.name }}</li>
        <li>{{ u.age }}</li>
        <li>{{ u.gender }}</li>

</ul>
    </div>
{% endblock %}

{% block title %}
    用户管理
{% endblock %}



{% block css %}
 .c1{background-color:red;}

{% endblock %}
子板语言

 3.模板里内置函数

{{ item.event_start|date:"Y-m-d H:i:s"}}
{{  name|truncatewords:"30" }}  #截取字符串name前30个字符
{{ my_list|first|upper }}
{{ name|lower }}    #字符串转换成小写

 示例:

views.py

def temp_func(request):

    name = 'HJASHasdvppljjf'

    return render(request,'temp_func.html',{'name':name,})

 temp_func.html  模板内置函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{{ name }}
{{ name|lower }}  #用管道符进行字符串大小写的转换

</body>
</html>

 4.自定义模板函数simple_tag

a、在app中创建templatetags模块

b、创建任意 .py 文件,如:temp.py

 @register.simple_tag

from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.simple_tag    #装饰器
def func1(v1,v2,v3):
    return  v1 + v2 + v3


@register.simple_tag
def my_input(id,arg):
    result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
    return mark_safe(result)

 c、在使用自定义simple_tag的html文件中导入之前创建的 temp.py 文件名

{% load temp%}  #load temp.py文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{{ name }}
{{ name|lower }}
{%  func1  1  2  3 %}

</body>
</html>

 d、使用simple_tag

{% load temp %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{{ name }}
{{ name|lower }}
{%  func1  1  2  3 %}    #函数名空格加参数
{% my_input 'i1' 'hide' %}  #函数名空格加参数



</body>
</html>

 e、在settings中配置当前app,不然django无法找到自定义的simple_tag

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1'   #注册app
]

 @register.filter()

如果想在模板函数里传参数与内置函数传参方法一样(my_list|first|upper)

需要在自定义函数里面改成

@register.filter  #把simple_tag改成filter
def func2(str1,str2):  

    return str1+str2

 模板里

{% load temp %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{{ name }}
{{ name|lower }}
{%  func1  1  2  3 %}
{% my_input 'i1' 'hide' %}
{{ "stringg1"|func2:"string2" }}  #filter方法  不能有空格


</body>
</html>

simple_tag与filter优缺点: 

simple_tag:不能作为if条件但是参数可以有多个任意参数

filter:可以作为if条件,但是参数不能任意,只能有两个不能有空格 

{% if   "stringg1"|func2:"string2"  %} #filter可以作为if条件
内容
{%endif%}