模板语法

模板语法:

  • 静态页面:页面的数据都是写死的,万年不变的
  • 动态页面:页面上的数据时从后端动态获取的

变量渲染之深度查询:

views.py文件
def index(request):
    name="闫闻"
    age=28
    is_mar="否"
    book_list=["西游记","水浒传","红楼梦","三国演义"]
    info_dir={"name":"zz","age":26}


    class Book(object):
        def __init__(self,title,price):
            self.title=title
            self.price=price

    book=Book("英雄本色","100")
    book01 = Book("阿Q正传", "321")
    book02 = Book("咖啡馆", "23")
    book03 = Book("菜鸡", "4321")
    book04 = Book("运维", "3424213")

    BooK_dir=[book01,book02,book03,book04]

    return render(request,"index.html",locals())
index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>深度查询</h2>

<p>姓名:{{ name }}</p>
<p>年龄:{{ age }}</p>
<p>婚否:{{ is_mar }}</p>

<p>中国的四大名著:{{ book_list }}</p>

<p>第一本:{{ book_list.0 }}</p>
<p>第二本:{{ book_list.1 }}</p>
<p>第三本:{{ book_list.2 }}</p>
<p>第四本:{{ book_list.3 }}</p>


<p>我有个小伙伴,名字{{ info_dir.name }},年龄{{ info_dir.age }}</p>

<p>读过的书:{{ book.title }}...............价格:{{ book.price }}</p>
<p>第一本:{{ BooK_dir.0.title }}</p>
<p>第二本:{{ BooK_dir.1.title }}</p>
<p>第三本:{{ BooK_dir.2.title }}</p>
<p>第四本:{{ BooK_dir.3.title }}</p>
</body>
</html>

image


内置过滤器:

views.py文件
from django.shortcuts import render
import datetime

# Create your views here.


def neizhi(request):
    book_dir = ["西游记", "水浒传", "三国演义", "红楼梦"]
    msg = '<a href="www.baidu.com">百度</a>'
    info="aAabBbcCc"
    now_time=datetime.datetime.now()
    message="hello world ,I am Chinese"
    file_size= 4342354235
    list=['a','b','c','d']
    return render(request, "neizhi.html", locals())

neizhi.htm文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>内置过滤器</p>

<p>book_dir最后一本书籍是:{{ book_dir|last }}</p>
<p>book_dir第一本书籍是:{{ book_dir|first }}</p>
<p>book_dir总共有{{ book_dir|length }}本书籍</p>
<p>book_dir_list默认值:{{ book_dir_list|default:"暂无书籍" }}</p>

<p>{{ msg }}</p>
<p>{{ msg|safe }}</p>

<p>字母转化大写:{{ info|upper }}</p>
<p>字母转化小写:{{ info|lower }}</p>
<p>首字母转化大写:{{ info|title }}</p>

<p>时间:{{ now_time }}</p>
<p>当前时间:{{ now_time|date:"Y-m-d H-i-s" }}</p>

<p>截取文件内容:{{ message|cut:"hello" }}</p>

<p>文件大小:{{ file_size|filesizeformat }}</p>

<p>拼接列表:{{list| join:"-"}}</p>

<P>随机提取:{{ list|random }}</P>

<P>按字符长度截取内容:{{ message|truncatechars:10 }}</P>
<p>按单词长度截取内容:{{ message|truncatewords:3 }}</p>

<p>切片:{{message | slice:"-7:"}}</p>

</body>
</html>

image


自定义过滤器:

示例:输入手机号13718987777-->137****7777,这时需要自定义过滤器
要声明自定义过滤器并且能在末班中正常使用,需要完成2个前置工作

注意事项:

1.需要配置setting文件,在INSTALLED_APPS中注册
2.在home子应用下创建“templatetags包”,在包目录创建py文件
3.需要在模板顶部使用load标签加载自定义过滤器文件
"""
{% load my_filters %}
"""

1、当前使用和声明过滤器的子应用必须在setting.py配置文件中的INSTALLED_APPS中注册了!!!:

"""settings.py"""
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app04.apps.App04Config'
]

2、在home子应用下创建templatetags包[必须包含__init__.py], 在包目录下创建任意py文件:

image

store/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app04.apps.App04Config'
]

store/urls.py
from django.contrib import admin
from django.urls import path,register_converter,include

urlpatterns = [
    path("app04/",include("app04.urls"))
]

app04/urls.py
from django.urls import path
from app04.views import custom

urlpatterns = [
    path("custom/",custom)
]


app04/views.py
from django.shortcuts import render,HttpResponse

# Create your views here.

def custom(request):
    tel="13718987777"
    return render(request, "custom.html", locals())

app04/templatetags/my_setting.py
from django import template
register = template.Library()

@register.filter("mobile")
def mobile(content):
	return content[:3]+"*****"+content[-4:]

store/templates/custom.html
{% load my_setting %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ tel| mobile }}
</body>
</html>

标签:

if标签:

app05/views.py
from django.shortcuts import render

# Create your views here.
def chage(request):
    score = 100
    return render(request,"chage.html",locals())

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

<div>
    成绩: {{ score }}
    {% if score > 90 %}
        <span>优秀</span>
    {% elif score > 60 %}
        <span>及格</span>
    {% else %}
        <span>不及格</span>
    {% endif %}
</div>

</body>
</html>

for标签:

属性 描述
forloop.counter 显示循环的次数,从1开始
forloop.counter0 显示循环的次数,从0开始
forloop.revcounter0 倒数显示循环的次数,从0开始
forloop.revcounter 倒数显示循环的次数,从1开始
forloop.first 判断如果本次是循环的第一次,则结果为True
forloop.last 判断如果本次是循环的最后一次,则结果为True
forloop.parentloop 在嵌套循环中,指向当前循环的上级循环
app06/views.py
from django.shortcuts import render

# Create your views here.

def fortest(request):
    book_list=["西游记","水浒传","红楼梦","三国演义"]
    book_list1 = [
        {"id": 11, "name": "python基础入门", "price": 130.00},
        {"id": 17, "name": "Go基础入门", "price": 230.00},
        {"id": 23, "name": "PHP基础入门", "price": 330.00},
        {"id": 44, "name": "Java基础入门", "price": 730.00},
        {"id": 51, "name": "C++基础入门", "price": 300.00},
        {"id": 56, "name": "C#基础入门", "price": 100.00},
        {"id": 57, "name": "前端基础入门", "price": 380.00},
    ]
    return render(request, 'fortest.html', locals())

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table width="800" align="center" border="1">
        <tr>
            <td>序号</td>
            <td>id</td>
            <td>标题</td>
            <td>价格</td>
        </tr>
{#        {% for book in book_list1 %}#}
{#            <tr>#}
{#                <td>{{ book.id }}</td>#}
{#                <td>{{ book.name }}</td>#}
{#                <td>{{ book.price }}</td>#}
{#            </tr>#}
{#        {% endfor %}#}

{# 建议不要直接使用for循环一维字典,此处使用仅仅展示for嵌套for而已 #}
{#        {% for book in book_list1 %}#}
{#            <tr>#}
{#                {% for field,value in book.items %}#}
{#                <td>{{ field }} == {{ value }}</td>#}
{#                {% endfor %}#}
{#            </tr>#}
{#        {% endfor %}#}

{#        {% for book in book_list1 %}#}
{#            <tr>#}
{#                <td>{{ book.id }}</td>#}
{#                <td>{{ book.name }}</td>#}
{#                {% if book.price > 200 %}#}
{#                    <td bgcolor="#ff7f50">{{ book.price }}</td>#}
{#                {% else %}#}
{#                    <td>{{ book.price }}</td>#}
{#                {% endif %}#}
{#            </tr>#}
{#        {% endfor %}#}

        {# 逆向循环数据 #}
{#        {% for book in book_list1 reversed %}#}
{#            <tr>#}
{#                <td>{{ book.id }}</td>#}
{#                <td>{{ book.name }}</td>#}
{#                {% if book.price > 200 %}#}
{#                    <td bgcolor="#ff7f50">{{ book.price }}</td>#}
{#                {% else %}#}
{#                    <td>{{ book.price }}</td>#}
{#                {% endif %}#}
{#            </tr>#}
{#        {% endfor %}#}

        {% for book in book_list1 %}
            <tr>
                <td>{{ forloop.counter }}</td>
{#                <td>{{ forloop.counter0 }}</td>#}
{#                <td>{{ forloop.revcounter }}</td>#}
{#                <td>{{ forloop.revcounter0 }}</td>#}
{#                <td>{{ forloop.first }}</td>#}
{#                <td>{{ forloop.last }}</td>#}
                <td>{{ book.id }}</td>
                <td>{{ book.name }}</td>
                {% if book.price > 200 %}
                    <td bgcolor="#ff7f50">{{ book.price }}</td>
                {% else %}
                    <td>{{ book.price }}</td>
                {% endif %}
            </tr>
        {% endfor %}

    </table>

</body>
</html>
</body>
</html>

模板嵌套继承:

语法:
{% include "模板文件名"%}  # 模板嵌入
{% extends "base.html" %} # 模板继承 

模板嵌套继承---include:

可以将重复代码进行分类存放,那边用到就在哪里引用

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

</head>
<body>

<h1>hhhhhhhhhhhhhhhhhhhhhhhhhhhh</h1>
{% include "ad.html" %}
</body>

templates/ad.html
<style>
    .advertise{
        width: 200px;
        height: 100px;
        background-color: orange;
        position: fixed;
        bottom: 10px;
        right: 10px;
    }
</style>
<div class="advertise">广告</div>


模板嵌套继承---extends:

app07/views.py(基础模块)
from django.shortcuts import render

# Create your views here.

def order(request):
    return render(request,"order.html")
templates/basis.html(基础模块)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>

{% block content %}
    <h1>1111111111111111111</h1>
{% endblock %}

{% block mes %}
    <h1>22222222222222222</h1>
{% endblock %}

<style>
    .advertise{
        width: 200px;
        height: 100px;
        background-color: orange;
        position: fixed;
        bottom: 10px;
        right: 10px;
    }
</style>
<div class="advertise">广告</div>

</body>

templates/order.html(修改引用基础模块)
{% extends 'basis.html' %}

{% block content %}
    {#保留原有数据#}
    {{ block.super }}
    <h3>修改原有数据</h3>
{% endblock %}
posted @   咖啡馆  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示