热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django基础template模版

2019独角兽企业重金招聘Python工程师标准template模版简介【具体示例参照博文最后的综合示例】模版语法模版组成HTML逻辑控制代码(如:python

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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_saferegister = 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 %}

模版引入和模版继承

详见下文综合示例

综合示例

架构

MydjangoAPPmigrationstemplatesbackup.htmlindex.htmltest.htmltemplatetagsMyTag.pyadmin.pyapps.pymodels.pyviews.pyMydjangosettingsurls.pywsgi.py

全局配置

urls.py

from django.contrib import admin
from django.urls import path,re_path
from APP import viewsurlpatterns = [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 = "click"S = "hello,'Django'"T = datetime.datetime.now()M = ''N = NoneL = ["一","二","三"]D = {"name":"小明","age":20}C = C_test("小红")return render(request,"index.html",locals())
def Back(request):return render(request,"backup.html")

index.html

{% block Alter%}

---------------------------------- 句点符 ----------------------------------------

{{ L }}

{{ L.0 }}
{{ D }}

{{ D.name }}
{{ C }}

{{ C.name }}
---------------------------------- 过滤器 ----------------------------------------

{{ D.age|add:2 }}

{{ S|addslashes }}

{{ S|capfirst }}

{{ S|cut:'hello' }}

{{ T}}

{{ T|date }}

{{ M|default:"空值" }}

{{ N|default_if_none:"none值" }}
---------------------------------- 筛选器 ----------------------------------------

{{ S|first }}

{{ S|last }}

{{ S|length }}

{{ S|slice:":3" }}

{{ S|slice:":-5" }}

---------------------------------- 特殊符 ----------------------------------------

{{ S|filesizeformat }}

{{ A|safe }}

{{ S|urlencode }}
---------------------------------- 条件判断 ----------------------------------------

{% if D.age > 20 %}
{{D.name}}的年龄大于20

{% elif D.age is 20 %}
{{D.name}}的年龄等于20

{% else %}
{{D.name}}的年龄小于20

{%endif%}
---------------------------------- for循环语句 ----------------------------------------

{% for i in L %}
第{{forloop.counter}}次循环,循环内容{{i}}

{% endfor %}
---------------------------------- 模版继承 ----------------------------------------

  • 【模版范围是模版代码开始和结束之间的内容】
  • 【模版内容包含的变量代码不能继承,只能继承静态代码】



{% endblock%}

test.html

用于引用测试的HTML文件

backup.html

{% extends "index.html" %}
{% load staticfiles %}
{% block Alter%}

{{ block.super}}
{% include "test.html"%}
{% endblock%}

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

---------------------------------- 句点符 ----------------------------------------
['一', '二', '三']

{'name': '小明', 'age': 20}
小明

小红
---------------------------------- 过滤器 ----------------------------------------
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



推荐阅读
author-avatar
aRuis
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有