模板层
后端朝html页面传递数据的两种方式:
第一种:render(request, 'index.html', {'k':v})
第二种:render(request, 'index.html', locals())
后端给html传递的数据类型:
- 字符串,列表,字典,元组,集合,数字,布尔等数据类型
- 函数名(函数名会自动加函数执行)
- 对象(相当于在前端页面打印了该对象)
前端访问容器类型数据的属性或方法统一采用句点符(.)
有序类型 直接点索引访问对应的值
字典 直接取key
再调用函数或方法的时候不支持传参
过滤器
n|length 统计长度
n|default:'不存在'
n|date:'Y-m-d'
n|filesizeformat
n|slice:'0:8:2'
n|truncatechars:10
n|truncatewords:10
n|add:1
n|safe 前端取消转义的方式
from django.utils.safestring import madk_safe()
make_sade("<h1>我是a标签</h1>") 后端取消转义的方式
标签
# for循环
{% for foo in user_list %}
{{ foo }}
{{ forloop }}
{% empty %}
{% endfor %}
# if判断
{% if flag %}
flag有值
{% elif tag %}
tag有值
{% else %}
两个都没有值
# 前端模板语法for循环和if判断可以嵌套使用
{% with hooby.qweeresdksmd as h %} # 起别名
{{ h }}
{{ hobby.qweeresdksmd}}
{% endwith %}
自定义(过滤器,标签,inclusion_tag)
自定义必须要走三个过程:
- 在应用下新建一个名为templatetags的文件夹
- 自新建的文件夹下新建一个任意名的py文件(my_tag.py)
- 在新建的py文件中固定写下面两句话( from django import template register = template.Library() )
# 自定义过滤器
@register.filter(name='body')
def index(a, b):
return a+b
# 自定义标签
@register.simple_tag(name='index')
def index(a, b, c, d):
return a+b+c+d
# 自定义inclusion_tag
@register.inclusion_tag('login.html', name='xxx')
def index(n): # 产生login.html小页面所需的数据
return {"data":data}
使用这些自定义的过滤器,标签,inclusion_tag, 首先加载我们自定义的页面:
{% load my_tag %}
{{ num|index:10}}
{% index 1 2 3 4 %}
{% xxx 10 %}
模板的继承和导入
index.html
index.html
{% block content %}
内容
{% endblock %}
被继承的模板
{% extends 'index' %}
{% block content %}
{{ block.super}}
子页面内容
{% endblock %}
模板的导入
{% include 'login.html' %}
模板中的block块儿越多页面的可扩展性越强,一般取三个块的内容(css, 内容(content),js)
模板主要针对静态网页页面的复用,自定义的内容针对动态数据的传输。
静态文件的配置:
{% load static %}
两种动态获取路径的方式
<link rel='stylesheet' href="{% static 'css/mycss.css'%}"> # 第一种方式
<link rel='stylesheet' href="{% get_static_prefix %}css/mycss.css"> # 第二种方式