Django基础-template模版

template模版简介

==【具体示例参照博文最后的综合示例】==

模版语法

模版组成

HTML + 逻辑控制代码(如:python、PHP等)

逻辑控制代码组成

{{变量名称}}

创建模版

Template("内容")

模版变量

{'name':'text'}

Django环境

python manange.py shell

template模版 和 context上下文对象

>>>from django.template import Context,Template
>>>t = Template("Hello,{{ name }}")
>>>c = Context({'name':'Django'})
>>>t.render(c)
'Hello,Django'

句点符

句点符是一种 Django 深度查找变量比较快捷的一种方式,可用于字符串、字典、列表、类等多种类型的使用

变量的过滤器(filter)

语法
{{变量|filter:函数}}
默认函数
函数释义
add给变量添加相应的值
addslashes给变量中的引号加转义符
capfirst首字母大写
cut从字符串中移除指定字符
date格式化日期字符串
default如果值是False,替换成设置的值,否则为原值
default_if_none如果值是None,替换成设置的值,否则为原值
自定义函数

创建自定义函数条件

  • 在app中创建templatetags模块[必须使用此名称]
  • 创建任意.py文件

需要固定格式

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

register = template.Library()
#register对象名称是固定的,不可改变

#自定义过滤器【传参只能传一个】
@register.filter
def 自定义函数(参数):
    代码块
    return 返回值
    
#自定义标签【不能用在控制语句】
@register.simple_tag
def 自定义函数(参数):
    代码块
    return 返回值

自定义过滤器使用

{{函数|自定义标签名}}

自定义标签使用

{% simple_tag_multi 值1 值2 %}

控制语句

if语句

语法

{%if 条件%}
    代码块
{%elif%}
    代码块
{%else%}
    代码块
{%endif%}
for循环语句

语法

{% for %}
    代码块
{% endfor %}
特殊变量释义
{{forloop.counter1}}循环计数,后跟数字为计数起始值
{{forloop.revcounter}}反向循环
{{forloop.revcounter2}}反向循环计数,后跟数字为计数起始值
{{forloop.first}}返回布尔值,第一次循环时值为True,其它循环为Flase
{{forloop.last}}返回布尔值,最后一次循环时值为True,其它循环为Flase
csrf_token 验证
  • Django视图中间件的一种安全机制
  • 开启方式: setting --- MIDDLEWARE 的参数中【默认开启】
  • 如果开启并且 模版中无 csrf_token 设置则返回403

setting开启设置,关闭注释即可,默认开启状态

'django.middleware.csrf.CsrfViewMiddleware',

模版设置

{% csrf_token %}
with 变量代替名

范围仅限于 with 和 endwith 之间

用法

{% with 新变量名=原变量名%}
    新变量名代码块
{% endwith %}
verbatim 禁止render

范围仅限于 verbatim 和 endverbatim 之间

{% verbatim %}
    代码块,全部以字符串形式出现
{% endverbatim %}
模版引入和模版继承

详见下文综合示例

综合示例

架构

Mydjango
    APP
        migrations
        templates
            backup.html
            index.html
            test.html
        templatetags
            MyTag.py
        admin.py
        apps.py
        models.py
        views.py
    Mydjango
        settings
        urls.py
        wsgi.py
全局配置

urls.py

from django.contrib import admin
from django.urls import path,re_path
from APP import views


urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^$',views.Test),
    path('backup',views.Back),
]

settings.py 改动

INSTALLED_APPS 中添加你建立的应用'APP',以,号结尾
TEMPLATES配置:
 'DIRS': [os.path.join(BASE_DIR, 'APP/templates')],
APP应用配置

views.py

# -*- coding:utf8 -*-
from django.shortcuts import render
import datetime
class C_test():
    def __init__(self,name):
        self.name=name
def Test(request):
    A = "<a href="">click</a>"
    S = "hello,'Django'"
    T = datetime.datetime.now()
    M = ''
    N = None
    L = ["一","二","三"]
    D = {"name":"小明","age":20}
    C = C_test("小红")
    return render(request,"index.html",locals())
def Back(request):
    return render(request,"backup.html")

index.html

<style>
    *{color:green;}
</style>

{% block Alter%}                                                      <!--定义模版开始,模版名称为 Alter-->
<body>
<div>----------------------------------  句点符  ---------------------------------------- </div>
<div>{{ L }}</div>                                  <!-- 取整个列表-->
<div>{{ L.0 }}</div>                                <!--取列表中第一位-->

<div>{{ D }}</div>                                  <!--取整个字典-->
<div>{{ D.name }}</div>                             <!--取字典指定键的值-->

<div>{{ C }}</div>                                  <!--类的实例对象-->
<div>{{ C.name }}</div>                             <!--类对象中的变量-->

<div>----------------------------------  过滤器  ---------------------------------------- </div>
<div>{{ D.age|add:2 }}</div>                        <!--取字典指定键的值,并增加值-->
<div>{{ S|addslashes }}</div>                       <!--引号加转义符-->
<div>{{ S|capfirst }}</div>                         <!--首字符变大写-->
<div>{{ S|cut:'hello' }}</div>                      <!--移除指定字符-->
<div>{{ T}}</div>                                   <!--未经过处理日期-->
<div>{{ T|date }}</div>                             <!--经过处理的日期-->
<div>{{ M|default:"空值" }}</div>                   <!--空值处理-->
<div>{{ N|default_if_none:"none值" }}</div>         <!--None 值处理-->

<div>----------------------------------  筛选器  ---------------------------------------- </div>
<div>{{ S|first }}</div>                            <!--字符串第一位-->
<div>{{ S|last }}</div>                             <!--字符串最后一个位-->
<div>{{ S|length }}</div>                           <!--字符串长度-->
<div>{{ S|slice:":3" }}</div>                       <!--字符串前几位-->
<div>{{ S|slice:":-5" }}</div>                      <!--字符串后几位去掉-->
<div>----------------------------------  特殊符  ---------------------------------------- </div>
<div>{{ S|filesizeformat }}</div>                   <!--变量值大小-->
<div>{{ A|safe }}</div>                             <!--浏览器后端传输前端未渲染的内容渲染处理-->
<div>{{ S|urlencode }}</div>                        <!--编码转换-->

<div>----------------------------------  条件判断  ---------------------------------------- </div>
{% if D.age > 20 %}
    <div>{{D.name}}的年龄大于20</div>
{% elif D.age is 20 %}
    <div>{{D.name}}的年龄等于20</div>
{% else %}
    <div>{{D.name}}的年龄小于20</div>
{%endif%}
<div>----------------------------------  for循环语句  ---------------------------------------- </div>
{% for i in L %}
    <div>第{{forloop.counter}}次循环,循环内容{{i}}</div>
{% endfor %}

<div>----------------------------------  模版继承  ---------------------------------------- </div>
<ul>
    <li>【模版范围是模版代码开始和结束之间的内容】</li>
    <li>【模版内容包含的变量代码不能继承,只能继承静态代码】</li>
</ul>
</body>
{% endblock%}                                                           <!--定义模版结束-->

test.html

<div>用于引用测试的HTML文件</div>

backup.html

{% extends "index.html" %}                               <!--模版继承-->
{% load staticfiles %}                                   <!--用于引用其他静态文件-->
{% block Alter%}                                         <!-- 引用模版 Alter 开始-->
<style>
    *{background: yellow;}                               /*新增样式示例*/
</style>
{{ block.super}}                                         <!-- 获取父类内容-->
{% include "test.html"%}                                 <!--引入的 HTML 测试静态文件-->
{% endblock%}                                            <!-- 引用模版 Alter 结束-->

访问 http://127.0.0.1:8000 效果展示测试

---------------------------------- 句点符 ----------------------------------------
['一', '二', '三']
一
{'name': '小明', 'age': 20}
小明
<APP.views.C_test object at 0x000001927B2C1D30>
小红
---------------------------------- 过滤器 ----------------------------------------
22
hello,\'Django\'
Hello,'Django'
,'Django'
Aug. 29, 2018, 5:10 p.m.
Aug. 29, 2018
空值
none值
---------------------------------- 筛选器 ----------------------------------------
h
'
14
hel
hello,'Dj
---------------------------------- 特殊符 ----------------------------------------
0 bytes
click
hello%2C%27Django%27
---------------------------------- 条件判断 ----------------------------------------
小明的年龄等于20
---------------------------------- for循环语句 ----------------------------------------
第1次循环,循环内容一
第2次循环,循环内容二
第3次循环,循环内容三
---------------------------------- 模版继承 ----------------------------------------
【模版范围是模版代码开始和结束之间的内容】
【模版内容包含的变量代码不能继承,只能继承静态代码】

访问 http://127.0.0.1:8000/backup 模版继承和改动测试

---------------------------------- 句点符 ----------------------------------------
---------------------------------- 过滤器 ----------------------------------------
空值
---------------------------------- 筛选器 ----------------------------------------
0
---------------------------------- 特殊符 ----------------------------------------
0 bytes
---------------------------------- 条件判断 ----------------------------------------
的年龄小于20
---------------------------------- for循环语句 ----------------------------------------
---------------------------------- 模版继承 ----------------------------------------
【模版范围是模版代码开始和结束之间的内容】
【模版内容包含的变量代码不能继承,只能继承静态代码】

转载于:https://my.oschina.net/zhaojunhui/blog/1936120

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值