Django模板层

模板层语法(两类)

变量相关:{{      }}

逻辑相关:{%  %}

给模板传值的方法

#方法1
#通过字典传值,指名道姓,例如下
return render(request,'reg.html',{'n':n,'f':f}) #方法2
return render(request,'reg.html',locals())
#locals()会将它所在名称空间中的所有名字全部传给前端
#缺点是如果你的前端并不需要那么多数据就会造成资源的浪费

变量相关

经过测试,python中的整型,浮点型,字符串,列表,字典,元组以及集合都可以传给前端

#模板中支持的写法
{# 取l中的第一个参数 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }}
{# 取对象的name属性 #}
{{ person_list.0.name }}
{# .操作只能调用不带参数的方法 #}
{{ person_list.0.dream }}

补充:也可以传函数名,会自动加括号调用改函数,前端会展示函数调用之后的返回值,如果函数需要传参的话,那么不可以,因为模板语法还不支持。

模板语法之过滤器

在Django的模板语言中,通过使用 过滤器 来改变变量的显示。

过滤器的语法: {{ value|filter_name:参数 }}

使用管道符"|"来应用过滤器。

#length
{#<p>{{ l|length }}返回值的长度</p>#} #default
{#<p>{{ ss|default:'当|左边的变量为空就会返回|右边的值' }}default跟你后端get方法很像</p>#}
{#<p>{{ ss|default:'' }} default必须要有两个参数</p>#} #filesizeformat
{#<p>{{ file_size|filesizeformat }}将值转化成一个文件大小</p>#} #trunchatewords
{#<p>{{ info|truncatewords:3 }} 就是按空格截取 三个点不算</p>#} #truncatechars
{#<p>{{ info|truncatechars:6 }}按字符截取内容 三个点也算</p>#} #dare
{#<p>{{ ctime|date:'Y-m-d' }} 只需要掌握年月日就可以了</p>#} #add
{#<p>{{ n|add:100 }}</p>#}
{#<p>{{ s|add:'hahah 翻车啦' }}加</p>#} #slice
{#<p>{{value|slice:"2:1"}}切片,顾头不顾尾,可以规定步长</p>#}
#safe
{#<p>{{ xxx|safe }}</p>#}
{#<p>{{ yyy|safe }}</p>#}
"""
Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,为了在Django中关闭HTML的自动转义,我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。
"""

自定义过滤器

自定义过滤器只是带有一个或两个参数的Python函数:

  • 变量(输入)的值 - -不一定是一个字符串
  • 参数的值 - 这可以有一个默认值,或完全省略

例如,在过滤器{{var | foo:'bar'}}中,过滤器foo将传递变量var和参数“bar”

#自定义顾虑器的存放位置
app01/
__init__.py
models.py
templatetags/ # 在app01下面新建一个package package
__init__.py
app01_filters.py # 建一个存放自定义filter的文件
views.py
#编写自定义过滤器
from django import template
register = template.Library() @register.filter(name="cut")
def cut(value, arg):
return value.replace(arg, "") @register.filter(name="addSB")
def add_sb(value):
return "{} SB".format(value)
#在前端使用自定义过滤器
{# 先导入我们自定义filter那个文件 #}
{% load app01_filters %} {# 使用我们自定义的filter #}
{{ somevariable|cut:"" }}
{{ d.name|addSB }}

模板语法之标签

for循环

<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>

关于forloop

if判断

{% for foo in '' %}
{% if forloop.first %}
<p>这是我的第一次</p>
{% elif forloop.last %}
<p>这是最后一次了啊</p>
{% else %}
<p>来啊来啊!!!</p>
{% endif %}
{% empty %}
<p>当for循环的对象为空的时候 会走empty</p>
{% endfor %}

with

定义一个中间变量,多用于给一个复杂的变量起别名。

注意等号左右不要加空格。

{% with business.employees.count as total %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}

自定义标签

# 自定义标签
# 支持传多个值
@register.simple_tag(name='jason')
def xxx(a,b,c,year):
return '%s?%s|%s{%s'%(a,b,c,year) # 自定义inclusion_tag
"""
接收用户传入的参数 然后作用于一个html页面
在该页面上渲染数据 之后将渲染好的页面
放到用户调用inclusion_tag的地方
""" # 自定义inclusion_tag
@register.inclusion_tag('bigplus.html')
def bigplus(n):
l = []
for i in range(n):
l.append('第%s项'%i)
return {'l':l}
#前端
<ul>
{% for foo in l %}
<li>{{ foo }}</li>
{% endfor %}
</ul>

模板的继承与导入

#首先需要再被继承的模块中划分多个区域
{% block 给区域起的名字 %} {% endblock %} #通常情况下一个模板中应该至少有三块
{% block css %}
页面css代码块
{% endblock %} {% block js %}
页面js代码块
{% endblock %} {% block contet %} #注意起的名字不加引号
页面主题内容
{% endblock %}

子板继承模板

#先继承模板所有的内容
{% extends 'home.html' %} #然后根据block块的名字修改指定区域的内容
{% block content %}
<form action="">
<p>username:<input type="text" class="form-control"></p>
<p>password:<input type="text" class="form-control"></p>
</form>
{% endblock %}

模板的导入:将一段html当做模块的方式导入另一个html展示

{%  include '想导入的html文件名' %}

Django学习之路05的更多相关文章

  1. Django学习之路04

    视图层 小白必会三板斧 HttpResponse render redirect django视图函数必须要给返回一个HttpResponse对象(render和redirect内部返回的也是一个Ht ...

  2. Django学习之路

    Django Website Collect django packages http://djangopackages.com/ django project http://code.djangop ...

  3. Django学习之路03

    django项目生命周期 路由层 路由匹配 #urls中的urlpatterns #url()方法 urlpatterns = [ url(r'^admin/', admin.site.urls), ...

  4. Django学习之路02

    静态文件配置 html文件默认全都放在templates文件夹下 对于前段已经写好了的文件, 我们只是拿过来使用 那么这些文件都可以称之为叫"静态文件"静态文件可以是 bootst ...

  5. ReactNative新手学习之路05 使用夜神模拟器调试ReactNative

    1.首先确保adb环境添加到path环境   2.安装好夜神模拟器   3.运行模拟器   4.adb connect 127.0.0.1:62001   5.摇一摇设置IP和端口 如127.168. ...

  6. python学习之路05

    控制流语句 博主认为所有的语言中,控制语句都是差不多的,无非就是循环,判断,if ,while,for.更重要的是,多加的练习,实战中发现自身问题,加深巩固 所以,下面会以实际的题目为主. 1.用户在 ...

  7. <2014 05 09> Lucida:我的算法学习之路

    [转载] 我的算法学习之路 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以 ...

  8. 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)

    初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...

  9. 开始了大概三四天的Rails学习之路

    最近因为一位极光推送朋友,我开始了大概三四天的Rails学习之路,最终达到的水平是可以比较轻松地做出大部分功能,然后自我感觉可以自如地按照Rails的设计思想去思考.由于编程的日益流行,我结识了越来越 ...

随机推荐

  1. 文件下载post请求,返回文件流转换zip,

    最近一个需求是批量下载文件,最后打包成zip包,post请求, 因为是文件流下载,所以在取后台数据的时候,要多传递一个[responseType: ‘blob’]这个参数 download() { t ...

  2. sybase连接失败 JZ006: Caught IOException: java.net.ConnectException处理方式

    windows系统下的处理办法: 1.查找端口为5000的进程的pid: 在cmd窗口中输入 netstat -ano 我这里是2324. 打开任务管理器,找到pid是2324的进程,结束进程. 打开 ...

  3. js实现新闻滚动-单行滚动或者多行滚动

    注明:都是转载. 先说单行滚动: --------直接复制以下代码即可试验 转载http://www.3lian.com/edu/2011/06-30/4986.html----------- < ...

  4. matlab 启动图标

    matlab 启动图标 cat /usr/share/applications/Matlab.desktop [Desktop Entry] Type=Application Name=Matlab ...

  5. 爬虫笔记(十一)——认识cookie

    什么是cookie? 在爬虫的使用中,如果涉及登录等操作时,经常会使用到cookie.简单的来说,我们访问每一个互联网页面,都是通过HTTP协议进行的,而HTTP协议是一个无状态协议,所谓的无状态协议 ...

  6. Git log 中文乱码

    以下三条命令搞定(系统是centos  7.4) git config --global i18n.commitencoding utf-8 git config --global i18n.logo ...

  7. EMD——EEMD——CEEMD语音增强算法基础

    首先,HHT中用到的EMD详细介绍:https://wenku.baidu.com/view/3bba7029b4daa58da0114a9a.html 本文具体参考 https://zhuanlan ...

  8. redis 的雪崩和穿透?

    https://blog.csdn.net/Aria_Miazzy/article/details/88066975

  9. day10-time模块

    import time print(time.time()) #时间戳1553070877.0166008 print(time.strftime('%Y-%m-%d %H %M %S')) #201 ...

  10. BadRequestException

    package me.zhengjie.common.exception; import lombok.Getter; import org.springframework.http.HttpStat ...