【Dgango】模版

继承

① extends用法:只继承一个模版

<!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: 50px;
            background-color: seashell;
            color: green;
        }
    </style>
    {% block css %}{% endblock %}
</head>
<body>
    <div class="pg-header">小男孩管理</div>

    {% block content %}{% endblock %}
    <div class="pg-footer"></div>
    <script src="/static/jquery.js"></script>
    {% block js %}{% endblock %}
</body>
</html>
templates/master.html #母模版
{% extends 'master.html' %}                 <!--继承模版-->
{% block title %}DIY网站{% endblock %}      <!--继承模版里面的块-->

{% block content %}
    <h1>用户管理</h1>
    <ul>
        {% for i in u %}
            <li>{{ i }}</li>
        {% endfor %}
    </ul>
{% endblock %}

{% block css %}
    <style>
        body{
            background-color: red;
        }
    </style>
{% endblock %}
templates/tpl1.html #子版
def tpl1(request):
    user_list = [1,2,3,4]
    return render(request,'tpl1.html',{'u':user_list})
app01/xiews.py

②include用法 :(可以多个重复操作)

<form>
    <input type="text"/>
    <input type="submit"/>
</form>
templates/tag.html #母模版
{% extends 'master.html' %}                 <!--继承模版-->
{% block title %}DIY网站{% endblock %}      <!--继承模版里面的块-->

{% block content %}
    <h1>用户管理</h1>
    <ul>
        {% for i in u %}
            <li>{{ i }}</li>
        {% endfor %}
    </ul>

    {% include 'tag.html'%}                 <!--导入单独组件-->
    {% include 'tag.html'%}

    {% for i in u %}                         <!--循环4次-->
        {% include 'tag.html'%}
    {% endfor %}


{% endblock %}


{% block css %}
    <style>
        body{
            background-color: red;
        }
    </style>
{% endblock %}
templates/tpl1.html #子板

③自定义simple_tag,filter

a、在app中创建templatetags文件夹

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

from django import template

register = template.Library()

@register.simple_tag
# 可以传入多个参数
def hanshu(a1,a2):
    return a1 * a2

# filter方法:
# @register.filter
# def func(a1,a2)
app01/temlatetags/daly.py

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

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

    {% hanshu 2  6 %}    <!--对应daly.py中的hanshu-->
</body>
</html>
templates/tpl2.html

# 自定义simple_tag与filter优缺点:
simple_tag 中:
  {% 函数名 a1 a2 a3... %}
  缺点:不能作为if条件
  优点:参数任意

filter 中:
  {{ a1|函数名:"a2,a3" }} {{a1|函数名:数字 }}
  缺点:最多两个参数,不能加空格:
  优点:能作为if条件

d、在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',
    'app01',
]
project/settings.py

e、views.py代码

def tpl2(request):
    name = 'abcABC'
    return render(request,'tpl2.html',{'name': name })
app01/views.py

# 还有个inclusion_tag方法

# view视图:
from django.template import Library
register = Library()
@register.inclusion_tag('menu.html')
def menu(request):
	# 从数据库中获取数据,menu_result接收并返回
	...
	return {'menu_result':menu_result}

	
# menu.html:
{% load 视图文件 %}
<body>
    <div class="pg-header">
        头部菜单
    </div>
    <div class="pg-content">
        <div class="menu">
            <!--相当于执行def menu函数并拿到menu_resul返回值-->
            {% menu request %} 
			...
        </div>
        <div class="content">
            {% block content %}{% endblock %}
        </div>
    </div>
    {% block js %} {% endblock %}
</body>
</html>
原文地址:https://www.cnblogs.com/dalyday/p/8991234.html