Django----模板层
一、模板层:
python的模板:HTML代码+模板语法
模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签。
import datetime
t=datetime.datetime.now()
# 方式1:
return HttpResponse("<h1>%s</h1>"%str(t)[:19])
# 方式2:
from django.template import Template, Context
templateObj=Template("<h1 style='color:red'>current time: {{ time }}</h1>")
contextObj=Context({"time":str(t)})
html=templateObj.render(contextObj)
return HttpResponse(html)
#方式3(常用的)
return render(request,"time.html",{"time":str(t)[:19]})
二、模板语法之变量
在 Django 模板中遍历复杂数据结构的关键是句点字符 .
1.语法:
{{var_name}}
views:
import datetime
li=[]
name="mqj"
i=100
l=[777,888,[55,55,99]]
d={"name":"mqj","age":""}
date = datetime.date(1993, 5, 2)
t=datetime.datetime.now()
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
def dream(self):
return "I an dream" person_egon = Person("egon", 1000)
person_alex = Person("alex", 9000)
person_nacha = Person("nacha", 10000) PersonList=[person_egon,person_alex,person_nacha] coutext="ddssdd dssdsad djjjd ddddd ccsd cdc dS SD Dcdcd"
label = "<a href=''>点击</a>" return render(request,"index.html",{"name":name,"l":l,"d":d,"date":date,"t":str(t),"person_egon":person_egon,"PersonList":PersonList,"coutext":coutext,"label":label,"i":i})
template:
<p>{{ name }}</p>
<p>{{ l.2.1}}</p>
<p>{{ i }}</p>
<p>{{ d.age }}</p>
<p>{{ date.month}}</p>
<p>{{ t }}</p>
<p>{{ person_egon.name }}</p>
<p>{{ person_egon.age }}</p>
<p>{{ person_egon.dream }}</p>
<hr>
<p>{{ PersonList.0.name }}</p>
<hr>
{% for k,v in d.items %}
<p>{{ k }},{{ v }}</p>
{% endfor %}
<hr>
{% for Proson in PersonList %}
<p>{{ Proson.name }}</p>
{% endfor %}
<hr>
{% for Proson in PersonList reversed %}
<p>{{ forloop.counter }}--{{ Proson.name }},{{ Proson.age }}</p>
{% endfor %}
三、模板之过滤器
1.语法
{{obj|filter__name:param}}
2.date:
如果 value=datetime.datetime.now()
{{ date|date:"Y-m-d" }}
3.default:
如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:
{{ li|default:"nothing" }}
4.safe:
value="<a href="">点击</a>"
{{ value|safe}}
5.slice:
如果 value="hello world"
{{ value|slice:"2:-1" }}
6.truncatechars
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
{{ value|truncatechars:9 }}
四、模板之标签
1、for标签
遍历每一个字典:
{% for k,v in d.items %}
<p>{{ k }},{{ v }}</p>
{% endfor %}
可以利用{% for obj in list reversed %}反向完成循环。
2.遍历每一个元素:
{% for person in person_list %}
<p>{{ person.name }}</p>
{% endfor %}
3.注:循环序号可以通过{{forloop}}显示
forloop.counter0 从0开始
forloop.revcounter0 反向从直到0
forloop.revcounter 反向开始 如:
{% for Proson in PersonList reversed %}
<p>{{ forloop.counter }}--{{ Proson.name }},{{ Proson.age }}</p>
{% endfor %}
1、if 标签
{% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
{% if i > 100 %}
<p>{{ i }}</p>
{% elif i == 100 %}
<p>等于100</p>
{% else %}
<p>{{ i }}</p>
{% endif %}
2、with
使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的
{% with a="mqj" %}
<p>{{ a }}</p>
{% endwith %}
3、csrf_token
这个标签用于跨站请求伪造保护
五、自定义标签和过滤器步骤:
1 、在settings中的INSTALLED_APPS,是否有当前应用
2 、在应用中创建一个templatetags
3 、在templatetags中创建py文件:mytag.py
4 、在mytag.py中:
引入:from django import template
from django.utils.safestring import mark_safe
register = template.Library() #register的名字是固定的,不可改变
5 、定义过滤器和标签
@register.filter
def multi(x,y):
return x*y
@register.simple_tag
def multiTag(x,y,z):
return x*y*z
6 、 在引用模板中导入:{% load myTag %}
7 、 调用:
过滤器: {{var|filter_name:参数}} # 参数只能是一个
标签: {% simple_tag 参数1 参数2 ... %}
对比过滤器与自定义标签的使用:
过滤器函数的参数只能有两个,自定义标签无参数限制
过滤器可以与逻辑标签共同使用,比如if标签。自定义标签不可以。
Django----模板层的更多相关文章
- Django模板层学习笔记
一. 前言 Django模板层的知识包括标签.过滤器.自定义标签.自定义过滤器以及inclusion_tag,最重要的是模板的继承和导入. 首先模板层最重要的是模板语法,之前我们提过涉及到变量用模板语 ...
- django——模板层
每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...
- Django模板层
一:模板简介 二:模板语法值变量 三: 模板之过滤器 四: 模板之标签 五:自定义标签和过滤器 一:模板简介 def current_datetime(request): now=datetime ...
- Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...
- Django模板层之templates
一 模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now ...
- $Django 模板层(模板导入,继承)、 单表*详(增删改查,基于双下划线的查询)、static之静态文件配置
0在python脚本中使用django环境 import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETT ...
- $Django 模板层(变量、过滤器 、标签)、自定义(模板过滤器,标签)
1 模版语法之变量:详见源码 -{{ 变量 }}:******重要******{#相当于print了该变量#} {#只写函数名 相当于()执行了#}<p>函数:{{ test }}< ...
- django模板层(templates)
1.基础部分 通过使用模板,就可以在URL中直接调用HTML,它还是松耦合的,灵活性强,而且更容易维护 而且可以将变量通过一定的方式嵌入到HTML中,最终渲染到页面,总的来说基于模板完成了数据与用户之 ...
- django模板层之静态文件引入优化
1.新手使用 我们一般在初学django的情况下,引入django的静态文件一般有如下两种方式: 通过路径引用: <script type="text/javascript" ...
- Django模板层2
一.单表操作 1.1 开启test from django.test import TestCase import os # Create your tests here. if __name__ = ...
随机推荐
- Flask-SQLAlchemy
Flask-SQLAlchemy SQLAlchemy 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言 ...
- deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I 听课笔记
这门课是讲一些分析机器学习问题的方法,如何更快速高效的优化机器学习系统,以及NG自己的工程经验和教训. 1. 正交化(Othogonalization) 设计机器学习系统时需要面对一个问题是:可以尝试 ...
- set排序(个人模版)
set排序: #include<stdio.h> #include<string.h> #include<iostream> #include<set> ...
- 洛谷 P1308 统计单词数【字符串+模拟】
P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定 ...
- CF 615D Multipliers
题目:http://codeforces.com/contest/615/problem/D 求n的约数乘积. 设d(x)为x的约数个数,x=p1^a1+p2^a2+……+pn^an,f(x)为x的约 ...
- JavaScript函数声明提升
首先,JavaScript中函数有两种创建方式,即函数声明.函数表达式两种. 1.函数声明. function boo(){ console.log(123); } boo() 2.函数表达式. va ...
- zzuli oj 1135 算菜价
题目: Description 妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐.现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵. Input 输入含 ...
- thinkPHP内置字符串截取msubstr函数用法详解
作者:陈达辉 字体:[增加 减小] 类型:转载 时间:2016-11-15 我要评论 这篇文章主要介绍了thinkPHP内置字符串截取函数用法,结合实例形式分析了thinkPHP内置的字符串截取函数功 ...
- 微信公众平台宣布增加接口IP白名单提高安全性
微信公众平台目前已经发布通知在平台接口调用上为了提高安全性需要添加IP白名单并仅允许白名单IP调用. 目前微信公众平台面向开发者主要提供的开发者ID和开发者密钥,在调用时ID和密钥通过检验即可进行调用 ...
- 字符串API
string可以看成是多个字符组成的只读数组,也可以通过下标去访问某个字符 访问i位置的字符 : str[i] 字符个数: str.length 倒数第n个字符 : str[str.length- ...