后端朝前端页面传递数据的方式:return HttpResponse(''字符串类型) 具体参照上一篇博客的视图层此处主要介绍通过 render方式传值:第一种:return render(request,'text.html',{'n':n}#此处的'n'是一个key,n才是要传过去的变量名对应的值,必须通过字典形式传第二种:return render(request,'tetx.html',local())#将当前所在的名称空间的名字全部传递给前端页面后端传函数名到前端(包含对象.方法 本质还是传函数名),会自动加括号调用,可以在前端html页面打印返回值,但是不支持传参 后端传对象到前端,就相当于打印了这个对象,不定义__str__的话,打印函数地址前端获取后端传过来的容器类型的内部元素 统一采用句点符(.) 需要注意,集合无法索引取值t={'name':['a','b']} >>> { {t.name.1}} #b 数字对应的就是列表的索引前端的模板语法可以调用python后端数据类型不需要传参的内置方法。 django的模板注释 》》》 {# 是不会出现在前端页面的 #} 原生的html注释 》》》
过滤器:前端统计字符串的长度:{
{ s|length }}前端获取数据如果是空就返回default后面默认的参数值:{
{ flag|default:'你这个东西是个空'}}将数字格式化成表示文件大小的单位:{
{ file_size|filesizeformat }}{
{ ctime }}格式化时间(不要加百分号){
{ ctime|date:'Y-m-d' }}字符串的切片操作:{
{ res|slice:'0:8' }}{
{ res|slice:'0:8:2' }}截取固定的长度的字符串 三个点也算:{
{ s|truncatechars:10 }}按照空格截取文本内容:{
{ res|truncatewords:4 }}{
{ s|truncatewords:4 }}{
{ 'hahah'|add:'heheheh' }} {#重点#}{
{ ht }} ht ='段落
'{
{ sr }}{
{ ht|safe }} sr = sr = ''{
{ sr|safe }} 通过添加safe,将字符串类型的样式在html页面展示出来 当后端传入css样式的字符串时,前端可通过{ {xxx|safe}} 来实现样式的正常渲染 也可以直接传入该字符串对应的变量名,前提是后端已经做好了处理:如下from django.utils.safestring import mark_safexxx = mark_safe('我是h1标签
')前端可以直接使用{ {xxx}},不需要添加safe
标签:for 循环{% for foo in t %} { {foo}} { {forloop}}{% endfor %}此处的forloop是 一个内置方法if 判断{% if flag %} flag不为空 {% else %} flag为空{% endif %}嵌套使用 当for循环对象l为空时,会触发empty代码块的内容 {% for foo in l %} {% if forloop.first %}这是我的第一次
{% elif forloop.last %}这是最后一次了啊
{% else %}嗨起来!!!
{% endif %} {% empty %}你给我的容器类型是个空啊,没法for循环
{% endfor %}
自定义过滤器、标签、inclusion_tag前提:1.在应用名下新建一个名为templatetags文件夹(必须叫这个名字)2.在该新建的文件夹内新建一个任意名称的py文件3.在该py文件中需要固定写下面两句代码 from django import template register = template.Library()一、自定义过滤器 前端只能传两个值,传多个值需要用可索引取值的python类型括起来,然后回去文件里做逻辑处理@register.filter(name='xbb')def index(a,b): return a+b在前端调用: { {110|xbb: 120}} 二、自定义标签@register.simple_tag(name='heh')def plus(a,b,c): return a+b+c在前端调用:{% heh 11 22 33%}三、自定义inclusion_tag@register.inclusion_tag('login.html',name='login') #第一个参数为调用的html页面def login(n): #n为在另一个前端页面传入的参数 l = [ '第%s项'%i for i in range(n)] #列表推导式 return {'l':l} #将l返回给login.html页面 在login.html页面,可以只存在一段代码块即可:
- {% for foo in l %}
- { { foo }} {% endfor %}
模板的继承与导入一:继承首先需要在被继承的模板中划分多个区域 #模板名字为 home.html{% block 取的名字 %} #名字选为 content 内部代码块{% endblock %}通常情况下,一个模板中至少有三块{% block css %} 页面css代码块{% endblock %}{% block css %} 页面js代码块{% endblock %}{% block css %} 页面主体代码块{% endblock %}子板继承模板1、先继承模板的所有内容{% extends 'home.html' %}2、再根据block块的名字修改指定区域的内容{% block content %} 需要修改的代码{% endblock %}注:如果不想改变原始效果,可通过{ {block.super()}} 来继续使用模板的样式二:导入 将一段html当做模块的方式导入到另一个html展示{% include '想导入的html文件名’ %}
静态文件配置{% load static %} # 第一种方式 # 第二种方式