一、关于django
中模板渲染数据的基本认识
- 1、语法:
{{变量名}}
- 2、变量名是由字母、数字、下划线组成且首字符不能是数字
- 3、变量的名称不能是
python
或者django
中的关键词或者保留字 - 4、可以传递字典、模型、方法、函数、列表到前端模板
- 5、
django
只能以字典的形式传递数据到前端模板
二、传递变量到前端页面
-
1、在模板渲染中使用
context
关键字传递一个对象def index2(request):
return render(request, 'book1.html',context={'name':'张三'})<h2>Hi,{{ name }}</h2>
-
2、直接传递一个字典
def index2(request):
return render(request, 'book1.html',{'name':'张三'}) -
3、传递一个函数,传递的函数不需要调用
from datetime import datetime
def index2(request):
return render(request, 'book1.html',{'date':datetime.now})<p>{{ date }}</p>
-
4、传递一个方法(在类中的函数叫方法)
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def sayName(self):
return '我的名字叫:%s' % self.name
def index2(request):
p = Person('张三',20)
return render(request, 'book1.html', {'person': p.sayName})<p>{{ person }}</p>
-
5、传递一个模型(类)
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def sayName(self):
return '我的名字叫:%s' % self.name
def index2(request):
p = Person('张三',20)
return render(request, 'book1.html', {'person': p})<p>{{ person.sayName }}</p>
<p>{{ person.name }}</p>
<p>{{ person.age }}</p> -
6、传递一个列表到前端
def index2(request):
books = ['三国演义','红楼梦','西游记','水浒传']
return render(request, 'book1.html', {'books': books})<p>{{ books }}</p>
三、过滤器的使用
过滤器实质就是一个函数,有
django
自带的过滤器也可以自己定义过滤器,过滤器的作用是:对变量进行过滤,在真正渲染变量之前进行处理,然后得出的结果替换原来的变量展现的结果
-
1、语法
<p>{{ name | 过滤器名称}}</p>
2、变量与过滤器中间使用管道符号
|
- 3、一个变量可以使用多个管道符号
-
4、前面说过滤器是一个函数,自然可以传递参数,直接在过滤器名称后面使用冒号
:
(注意中间不能有空格)<p>{{ name | cut:" " }}</p>
四、django
中常见的过滤器
-
1、
add
:如果是数字就添加,如果是字符串就拼接,否则就空的<p>{{ books | add:2}}</p>
-
2、
default
:当变量为False
的时候就显示(python
中False
的情况空字符串、None
)<p>{{ books | default:'hello word'}}</p>
3、
default_if_none
:这个只能是变量为None
的时候才显示- 4、
first
:表示一个列表中第一个 - 5、
last
:表示一个列表中最后一个 -
6、
date
:格式化日期和时间-
Y
表示四位数的年 -
y
表示二位数的年 -
m
表示两位数的月 -
n
表示一位数的月 -
d
表示两位数的日 -
J
表示一位数的日 -
h
表示两位十二小时制的小时 -
H
表示两位的二十四小时制的小时 -
i
表示分钟 -
s
表示秒
def index2(request):
return render(request, 'book1.html', {'date': datetime.now})<p>{{ date | date:'Y-m-d H:i:s' }}</p>
-
-
7、
join
和python
中一样的用法def index2(request):
books = ['a','b','c']
return render(request, 'book1.html', {'books': books})<p>{{ books | join:',' }}</p>
-
8、
length
返回字符串或者数组的长度def index2(request):
books = ['a','b','c']
return render(request, 'book1.html', {'books': books})<p>{{ books | length }}</p>
-
9、
length_is
判断一个字符串或者数组返回的长度是否为指定的<p>{{ books | length_is:3 }}</p>
10、
truncatechars
表示字符串过长的时候会根据指定的长度截取,后面用...
表示(长度包括三个点)- 11、
capfirst
首字符大写 -
12、
slice
切割列表(前包括后面不包括)<p>{{ books | slice:'2' }}</p>
13、
striptags
去除全部的html
标签- 14、
safe
会关闭变量的自动转义(传递脚本可以执行) - 15、
floatformat
浮点数的格式化
五、模板中的判断与循环(记住要有结束符合)
-
1、
if
判断def index2(request):
return render(request, 'book1.html', {'age': 24}){% if age > 20 %}
<p>年龄大于20</p>
{% else %}
<p>年龄小于20</p>
{% endif %} -
2、
for..in..
遍历数组(列表)def index2(request):
books = ['三国演义','西游记','红楼梦','水浒传']
return render(request, 'book1.html', {'books': books}){% for book in books %}
<li>{{ book }}</li>
{% endfor %} -
3、关于
for
循环中的补充- 1、
forloop.counter
表示迭代的次数,从1开始 - 2、
forloop.counter0
表示迭代的次数,从0开始 - 3、
forloop.revcounter
表示下标从大到小,从1开始 - 4、
forloop.revcounter0
表示下标从大到小,从0开始 - 5、
forloop.first
返回布尔值,如果是第一次迭代就返回true
否则是false
- 6、
forloop.last
返回布尔值,如果是最后一次迭代就返回true
否则是false
- 7、
forloop.parentloop
用于多层for
循环,放回上一层的以上的
- 1、
六、关于页面的跳转
-
1、在
urls.py
中定义name
from django.conf.urls import url
import views
urlpatterns = [
url(r'^$', views.index,name='book_index'),
url(r'^book/', views.index1),
] -
2、在一个页面中使用
url
进行跳转<a href="{% url 'book_index' %}">跳转到页面一</a>
七、页面跳转传递参数
-
1、在
urls.py
中定义name
和传递参数的from django.conf.urls import url
import views
urlpatterns = [
url(r'^$', views.index,name='book_index'),
url(r'^book/(?P<bookid>\d+)$', views.index1,name='book_list'),
] -
2、在前端页面中定义跳转,并传递参数
<a href="{% url 'book_list' bookid='10' %}">跳转</a>
-
3、接收参数
def index1(request,bookid='0'):
print '传递的参数',bookid
books = ['三国演义', '西游记', '红楼梦', '水浒传']
return render(request, 'book1.html', {'books': books})
八、模板的继承
-
1、子模板继承父模板用
extends
必须在第一行{% extends 'base.html' %}
-
2、在父模板中定义
block
用于子模块调用{% block 模块名称 %}
{% endblock %} -
3、子页面中直接调用父模板中的模块
{% block 模块名称 %}
{% endblock %} 4、说明:子模块中内容必须写在模块中,否则不现实
九、使用include
引入公用页面(头部和尾部)
- 1、定义头部或者尾部页面(要去除
html
) -
2、在模块中使用
include
{% include 'book.html' %}
十、加载静态文件
-
1、查看
settings.py
文件中是否加载(一般是存在的)INSTALLED_APPS = [
...
'django.contrib.staticfiles',
...
] -
2、有两种方法存放静态文件
- 1、在创建的组件(app)下面直接创建一个
static
文件夹 - 2、在根目录下创建一个
static
文件夹
- 1、在创建的组件(app)下面直接创建一个
-
3、在组件中创建一个
static
的使用方式-
1、在页面顶部(子模板必须是在继承的下面)
{% load static %}
-
2、直接引入静态文件(会直接从
static
文件夹开始查找)<link rel="stylesheet" href="{% static 'index.css' %}">
<img src="{% static 'images/png-Angular2-by-StuQ.png' %}"/>
-
-
4、在根目录中创建
static
文件夹-
1、 在
settings.py
底部配置静态文件的路径(可以是相对路径,绝对路径,OS
查找)STATICFILES_DIRS = (
'static',
) 2、使用方式跟上面的使用方式一样的
- 3、注意
settings.py
头部加上# -*- coding: utf-8 -*-
编码,否则中文注释也会报错
-