day62 Pyhton 框架Django 05
内容回顾
1.变量
render(request,'模板文件名',{ k1:v1 })
{{ k1 }}
{{ list.0 }} {{ dict.key }} {{ dict.keys }} {{ dict.values }}
{{ p1 }} {{ p1.name }} {{ p1.eat }}
2.过滤器
{{ value|filter }} {{ value|filter:参数 }}
内置的过滤器:
default 默认值 {{ value|default:’nothing‘}}
title
add
slice {{ value|slice:’1:2:2‘}}
length 长度
filesizesformat
first last
date {{ now|date:'Y-m-d H:i:s' }}
safe 不做转义
3.tags
{% %}
{% for i in list %}
{{ forloop }}
{{ i }}
{% endfor %}
{% for i in list %}
{{ i }}
{% empty %}
空空如也
{% endfor %}
{% if 条件 %}
{% elif 条件%}
{% else %}
{% endif %}
注意:1.不支持连续判断
1. 不支持算数运算 + - * /
4.母板和继承 ***
定义母板: base.html
写一个HTML文件,提取多个页面的公共部分,在页面中定义block块。
继承:
写子页面,第一行写 {% extends 'base.html' %},重写block块。
注意的内容:
1. {% extends 'base.html' %} 写在第一行 'base.html'加上引号
2. 要修改的内容写在block块中
3. 多写点block块 css js
5.组件
组件:一小段写死的HTML代码
使用:{% include ’nav.html‘ %}
6.csrf_token
将{% csrf_tonken %}写在from表中,name=csrfmiddlewaretoken
今日内容:
1.装饰器
装饰器:在不改变原函数的代号和调用方法的基础上,给原函数额外增加工功能。
def warpper(func):
def inner(*args,**kwargs):
# 原函数执行之前的操作
ret = func(*args,**kwargs)
# 原函数执行之后的操作
return ret
return inner
@warpper # xxx = warpper(xxx)
def xxx(*args,**kwargs):
xxx(*args,**kwargs)
带参数的装饰器:
def outer(flag):
def timer(func):
def inner(*args, **kwargs):
ret = func(*args, **kwargs)
if flag:
print(time.time())
return ret
return inner
return timer
多个装饰器装饰一个函数:
def wrapper1(func):
def inner(*args, **kwargs):
print('wrapper1 前')
ret = func(*args, **kwargs)
print('wrapper1 后')
return ret
return inner
def wrapper2(func):
def inner(*args, **kwargs):
print('wrapper2 前')
ret = func(*args, **kwargs)
print('wrapper2 后')
return ret
return inner
@wrapper2 # func1 =wrapper2(func1) wrapper2.inner
@wrapper1 # func1 =wrapper1(func1) wrapper1.inner
def func1():
print('func1')
装饰器的修复技术
from functools import wraps
def w1(func):
@wraps(func)
def inner(*args, **kwargs):
print('wrapper1 前')
ret = func(*args, **kwargs)
print('wrapper1 后')
return ret
return inner
2.自定义的方法
自定义filter
定义
1. 在app下创建一个名叫templatetags的python包
2. 在包内创建py文件
3. 在py文件中写:
from django import template
register = template.Library()
4. 写函数
def add_sb(value, arg):
return '{}_{}_sb'.format(value, arg)
5. 给函数加装饰器
@register.filter
def add_sb(value, arg):
使用:
{% load my_tags %}
{{ 'alex'|add_sb:'very' }}
{% if 'alex'|add_sb:'big' == 'alex_big_sb' %}
zhen
{% endif %}
自定义simple_tag
定义:
前3步同上
1. 写函数(函数参数不受限制),加装饰器
@register.simple_tag
def str_join(*args, **kwargs):
print(args)
print(kwargs)
return "-".join(args) + '*'.join(kwargs.values())
使用:
{% load my_tags %}
{% str_join 'k1' 'k2' 'k3' k1='v1' k2='v2' %}
自定义inclusion_tag
返回一个动态的代码段
定义:
前3步同上
1. 写函数加装饰器
@register.inclusion_tag('li.html')
def show_li(num):
return {'num': range(num)}
1. 写模板(li.html)
<ul>
{% for foo in num %}
<li> {{ foo }}</li>
{% endfor %}
</ul>
使用:
{% load my_tags %}
{% show_li 10 %}
3.静态文件相关
{% load static %}
<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.3.7/css/bootstrap.css' %}">
<link rel="stylesheet" href="{% static 'css/dsb.css' %}">
{% get_static_prefix %} 获取静态文件的别名
day62 Pyhton 框架Django 05的更多相关文章
- pyhton框架Django之cookie和session
一,cookie和session的理解 cookies 是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies.它保存在浏览器下的某个文 ...
- day64 Pyhton 框架Django 07
day67 内容回顾 视图 1. CBV 定义 from django.views import View class Addpub(View): def get(self,request): sel ...
- day63 Pyhton 框架Django 06
内容回顾 1.装饰器 装饰器:是一个闭包函数,在不改变原函数的代码和调用方式的基础上,给原函数增加功能. def wrapper(func): def inner(*args,**kwargs): # ...
- day61 Pyhton 框架Django 04
内容回顾 1.django处理请求的流程: 1. 在浏览器的地址栏输入地址,回车发get请求: 2. wsgi模块接收请求: 3. 在urls.py文件中匹配地址,找到对应的函数: 4. 执行函数,返 ...
- day60 Pyhton 框架Django 03
day61 内容回顾 1.安装 1. 命令行: pip install django==1.11.18 pip install django==1.11.18 -i 源 2. pycharm sett ...
- day58 Pyhton 框架Django 01
内容回顾 python基础 网路编程 并发编程 数据库 前端 osi7层 tcp/ip 5层模型 应用层 表示层 ...
- python运维开发(十七)----jQuery续(示例)web框架django
内容目录: jQuery示例 前端插件 web框架 Django框架 jQuery示例 dom事件绑定,dom绑定在form表单提交按钮地方都会绑定一个onclick事件,所有查看网站的人都能看到代码 ...
- Web框架——Django笔记
Web框架--Django笔记 MVC和MTV MVC:Model.View.Controller MTV:Model.Template.View Django--MTV 1.创建Django程序 ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
随机推荐
- python日志模块配置
import logging logging.basicConfig(filename= 'out.log',filemode= 'w+', level= logging.DEBUG, format= ...
- java中包名命名规范
在idea中创建package遇到的问题 发现一个问题,当我创建一个lesson-02的package时,输入这个包名后,package自动变成了文件夹 在网上搜索发下java包名一般是小写字母进行命 ...
- docker下部署jira破解版
1. 制作Docker破解容器 在/opt/jira下新建一个Dockerfile文件 touch Dockerfile 编辑Dockerfile文件 vim Dockerfile FROM cpta ...
- virtualbox虚拟机之连接本地主机同时可以连接外部网络
如果主机需要通过ssh,ftp等方式访问linux虚拟机,是无法实现的.这个时候要实现端口互通,我们要用到VirtualBox的端口转发功能.所谓的端口转发功能,就是借助主机上虚拟出来的Virtual ...
- 第24课 - #pragma 使用分析
第24课 - #pragma 使用分析 1. #pragma简介 (1)#pragma 是一条预处理器指令 (2)#pragma 指令比较依赖于具体的编译器,在不同的编译器之间不具有可移植性,表现为两 ...
- openstack (共享组件) 时间同步服务
云计算openstack共享组件——时间同步服务ntp(2) 一.标准时间讲解 地球分为东西十二个区域,共计 24 个时区 格林威治作为全球标准时间即 (GMT 时间 ),东时区以格林威治时区进行 ...
- 最火的开源 IDE介绍与安装教程
导读:开发C/C++最好的IDE是什么,尤其对于很多初学者来说用什么IDE比较容易上手,本文将做以介绍,并为您演示如何下载与安装. 本文字数:1015,阅读时长大约:10分钟 (一)最火的开源IDE ...
- python中生成随机整数(random模块)
1.从一个序列中随机选取一个元素返回: random.choice(sep) 2.用于将一个列表中的元素打乱 random.shuffle(sep) 3.在sep列表中随机选取k个 ...
- MySQL手注之报错注入
报错注入: 指在页面中没有一个合适的数据返回点的情况下,利用mysql函数的报错来创造一个显位的注入.先来了解一下报错注入常用的函数 XML:指可扩展标记语言被设计用来传输和存储数据. concat: ...
- sping ioc 源码分析(二)-- refresh()方法分析
测试环境代码: @Configuration @ComponentScan("com.yang.xiao.hui.ioc") @Conditional(MyCondition.cl ...