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文件名' %}

最新文章

  1. loadrnner添加C语言代码的几种方式
  2. AngularJS 的嵌套路由 UI-Router
  3. 如何在Eclipse中查看JDK以及JAVA框架的源码(转载)
  4. Hibernate5.2关联关系之单向多对一(二)
  5. ABAP QUERY报表添加双击事件
  6. ThinkPad L421 如何禁用触摸板
  7. Unity3D 游戏开发构架篇 ——角色类的设计与持久化
  8. poj1038
  9. appium desktop 版本发布
  10. 如何在 ASP.NET Core 中发送邮件
  11. 从源码来理解slf4j的绑定,以及logback对配置文件的加载
  12. 使用apache进行域名绑定
  13. Win Server 2008 r2 with SP2装机过程记录
  14. 逆向工程核心原理-IA-32寄存器
  15. S0.4 二值图与阈值化
  16. ELK 6.X 版本下xpack破解
  17. xshell 显示中文
  18. Java知多少(71)文件与目录管理
  19. $.on方法与$.click()的区别
  20. js中几种常见的方法的实例 shift,unshift,push,prop

热门文章

  1. WEB网站的favicon.ico的设置
  2. python_pycharm控制台输出带颜色
  3. axios新手实践实现登陆
  4. Python的IDE之Pycharm的使用
  5. web开发相关工具总结
  6. mysql琐碎操作杂记
  7. ZJNU 1153 - 找单词——中级
  8. WPS隐藏文档修订显示的方法
  9. drf框架与postman初始
  10. 基础篇五:Nginx的目录和基础配置