1、模板语言中的for循环的最后一个的表示方式

            {% for auther in auther_list %}
{% if forloop.last %}
{# 这里的意思是for循环的最后一个的意思#} <option value="{{ auther.id }}">{{ auther.auther_name }}</option>
{% else %}
<option value="{{ auther.id }}">{{ auther.auther_name }}</option>|
{% endif %}
{% endfor %}

  

2、如果使用bootstrap的表单太宽,可以在表单的标签放在下面的标签的里面  

  <div class="row">
<div class="col-md-5 col-md-offset-3">
</div>
</div>

  

3、获取前台发过来的多选的数据

        auther_list = request.POST.getlist("book_auther")
# 如果页面是多选的select或者checkbox,则后台如果想获取前台传递过来的值,则使用getlist方法

  

4、在html中使用字体图标

<a href="/app1/edit_book/?d={{ book.id}}"><button type="button" class="btn btn-success"><span class="glyphicon glyphicon-pencil"></span>&nbsp编辑</button></a>
<a href="/app1/del_book/?d={{ book.id }}"><button type="button" class="btn btn-danger"><span class="glyphicon glyphicon-trash"></span>&nbsp删除</button></a>

 

只需要找到某个图标的样式,然后写一个span标签,这个span标签的class样式使用查到的字体图标的样式就可以了

 

页面效果如下

5、模板语言的for循环

<hr>
<ul>
{% for i in name_list %}
<li>{{ i }}</li>
{% endfor %} </ul>

6、万能的句点号,取列表的某个值

<hr>
{{ name_list.0 }}
<hr>
{{ name_list.1 }}
<hr>
{{ name_list.2 }}
<hr>

  

7、万能的句点号,取字典的某个key

<hr>
{{ name_dict.small }}
<hr>
{{ name_dict.middle }}
<hr>
{{ name_dict.big }} <hr>

  

8、万能的句点号,取字典的key,items,values

<hr>
{{ name_dict.items }}
<hr>
{{ name_dict.values }}
<hr>
{{ name_dict.keys }}
<hr>

  

9、万能的句点号,获取某个对象的属性

<hr>
{{ p1 }}
<hr>
{{ p1.name }}
<hr>
{{ p1.age }}

  

下面回忆一下过滤器

首先是默认过滤器

{{ test|default:"使用默认值" }}

  

{{ p_list.0.name|length }}

  

{{ file_size|filesizeformat }}

  

{{ slice_str|slice:"1:2" }}
{#slice:不能切数字,可以切列表和字符串#}

  

{{ now|date:"Y-m-d H:i:s" }}

  

解决xss攻击

<hr>
{#解决xss攻击#}
{{ test_url|safe }} <hr>
{#解决xss攻击#}
{% autoescape off %}
{{ test_url }}
{% endautoescape %}

  

{{ obj|truncatechars:"6" }}

{#按照字符截字符串,截6个字符#}

{{ obj|truncatewords:"6" }}

{#按照单词截字符串,截6个单词#}

  

自定义过滤器

1、现在对应的app的目录下创建一个templatetgas文件夹

2、然后在对应的目录下创建一个py文件

3、在py文件中引入模块

4、首先写一个只有一个参数的过滤器,如果过滤器函数只有一个参数,那么这个参数一定是管道符前面的字符串

在前端html文件中使用自定义的过滤器,首先需要引入文件

最后就是用使用自定义过滤器,上面过滤器中的arg这个参数就是这里的name变量的值

5、最后写一个带一个参数的过滤器

在前端使用我们带有一个参数的过滤器,在这个例子中,arg1是name这个变量的值,arg2是3333这个字符串

这里要注意,自定义过滤器只支持最多2个参数

forloop的用法

正序循环

<hr>
<ul>
{% for i in name_list %}
<li>{{ forloop.counter }}--->{{ i }}</li> {% endfor %}
</ul> <hr>
<ul>
{% for i in name_list %}
<li>{{ forloop.counter0 }}--->{{ i }}</li> {% endfor %}
</ul>

  

倒序循环

<hr>
<ul>
{% for i in name_list %}
<li>{{ forloop.revcounter }}--->{{ i }}</li> {% endfor %}
</ul> <hr>
<ul>
{% for i in name_list %}
<li>{{ forloop.revcounter0 }}--->{{ i }}</li> {% endfor %}
</ul>

  

判断是否为循环的第一个,或者最后一个

<hr>
<ul>
{% for i in name_list %} {# forloop.last:判断是否为for循环的最后一个,如果不是则为false,如果是,则为true#}
<li>{{ forloop.last }}--->{{ i }}</li> {% endfor %}
</ul> <hr>
<ul>
{% for i in name_list %} {# forloop.last:判断是否为for循环的第一个,如果不是则为false,如果是,则为true#}
<li>{{ forloop.first }}--->{{ i }}</li> {% endfor %}
</ul>

  

判断父循环的的顺序

<hr>
<ul>
{% for i in name_list %} {# 如果是两层循环,这个是就可以取外层循环的计数#}
<li>{{ forloop.parentloop.first}}--->{{ i }}</li> {% endfor %}
</ul>

  

if语句

if语句的empty的用法

<hr>

{#这个的意思是如何name_list中有数据,则显示数据,如果name_list为空,则执行{% emptey %}中的代码#}
<ul>
{% for i in name_list %} <li>{{ forloop.first}}--->{{ i }}</li>
{% empty %}
没有数据
{% endfor %}
</ul>

  

if语句的elif的用法

<hr>
{% if name %}
{{ name }} {% elif name_list %}
{{ name_list }} {% else %}
没有数据
{% endif %}

  

{#if语句支持很多判断,比如and ,or ,== ,> ,<,<=,>=,!=,in,not in ,is,not is#}

with的用法

<hr>
{% with temp=name_list.1 %}
{#如果某个变量的名称太长,我们可以通过with方法把这一个很长的变量赋值给一个较短的变量,方便我们使用#}
{{ temp }}
{% endwith %}

  

5、模板的相关遗漏的点

1、继承

{% extends "base.html" %}

  

2、重写

{% block content %}
{% endblock %}

  

3、如果我们想使用某个组件的话,可以用include语句,这个就会把test.html中的代码放在当前html文件的这个位置上,把html文件嵌入到另外一个htmls文件中,如果和extend使用,则需要写在某个block块中

{% include "test.html" %}

  

4、正常情况下,django的静态文件都在放在static目录下下,这个static其实一个别名,也就是下面这里

STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,"static")
]

  

我们在html中引入静态文件也是用static这个路径去引入的

    <!-- Placed at the end of the document so the pages load faster -->
<script src="/static/js/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="/static/js/jquery.min.js"><\/script>')</script>
<script src="/static/js/bootstrap.min.js"></script>
<!-- Just to make our placeholder images work. Don't actually copy the next line! -->
<script src="/static/js/holder.min.js"></script>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<script src="/static/js/ie10-viewport-bug-workaround.js"></script>

  

但是如果有一天,需要修改static的别名,那么我们就需要在所有的html文件中修改所有引入静态文件的路径,为了避免这种情况,django已经替我们解决了这问题,load static就会去settings.py文件查找静态文件路径的别名,然后进行路径的拼接

    {% load static %}
{# <script src="/static/js/ie10-viewport-bug-workaround.js"></script>#}
{# 之前我们是按照上面的方式引入的静态文件,以后我们用下面的方式引入静态文件就可以编辑静态文件路径别名被修改的问题#} <script src="{% static 'js/ie10-viewport-bug-workaround.js' %}"></script>

  

6、自定义tag,给前端返回一个字符串

前面我们学习了自定义filter,自定义filter有一个很大的弱点就是最多只能传递2个参数,而其中一个参数还是模板语言中的变量,这里我们学的tag就可以无限制传递更多的参数,下面我们看下自定义tag的用法

同样需要在对应的app的目录下创建一个templatetags的python的文件夹

然后创建一个py文件

首先需要引入一个模块

from django import template

register = template.Library()

  

然后写我们的tag的函数

# 自定义tag

@register.simple_tag(name="mytag")
def mytag(arg1,arg2,arg3):
return arg1 + arg2 + arg3

  

最后在前端的页面调用这个tag的函数

{% load my_new_filter %}
{% mytag "aa" "bb" "cc" %}

  

这样页面就会显示函数的返回的值

7、自定义html文件,可以实现往前端嵌入一个html片段

同样也在tempaltetags文件中实现

然后在py文件写我们的函数

@register.inclusion_tag("result.html")
def show_result(n):
n = 1 if n < 1 else int(n) data = ["{i}".format(i=i) for i in range(1,n + 1) ]
print(data)
return {"data":data}

  

这里的tag中的result.html文件就是我们往前端嵌入的html字段,show result这个函数的参数n就是前端html文件调用我们的函数传递的参数,这个函数的返回值会渲染到result.html文件,然后把渲染后的html文件切换我们前端的html文件中

我们先看下result.html文件

<ul>

    {% for i in data %}

        <li>{{ i }}</li>

    {% endfor %}

</ul>

  

我们看下最终前端的html的文件,就是调用我们前面定义的函数

最后看下前端渲染的效果

django的模板语言中一些之前没有用过的小点的更多相关文章

  1. Django的模板语言

      Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. ...

  2. django 更新 模板语言

    Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言中按此语法使用:{{ 变量名 ...

  3. Django的模板语言介绍

    模板语言: 1.我们先看下在命令行中渲染模板 先导入模块对象 2.渲染一个变量 <p>当前时间:{{ time }}</p> return render(request,&qu ...

  4. Django之模板语言(二)-----Filter

    1.其他常用的模板语言: 通过模板语言可以让前端页面显示数据,数据可以是基本数据类型,也可以是对象亦或者对象的列表,结合着模板中的for.if等配合使用. 要注意前端页面中,出现没有后端数据的情况,随 ...

  5. Django之模板语言(一)

    1.Django的模板语言(简而言之,字符串替换) 1.目前为止已经学过的模板语言: 1.{{ name }}  ------>变量 2. for 循环: {% for i in book_li ...

  6. 第四篇Django之模板语言

    Django之模板语言 一 模板的执行 模板的创建过程,对于模板,其实就是读取模板(其中嵌套着模板的标签),然后将Model中获取的数据插入到模板中,最后将信息返回给用户 def current_da ...

  7. Django模板语言中的自定义方法filter过滤器实现web网页的瀑布流

    模板语言自定义方法介绍 自定义方法注意事项 Django中有simple_tag 和 filter 两种自定义方法,之前也提到过,需要注意的是 扩展目录名称必须是templatetags templa ...

  8. Django之模板语言

    一.模板语言介绍 模板语言渲染的整个过程其实就是将html转换成函数,并为该函数提供全局变量,然后执行该函数 二.模板语言的语法 模板中也有自己的语言,该语言可以实现数据展示 # 业务请求处理做的页面 ...

  9. Django之模板语言(四) ------>Tags

    案例1:单层for循环 # Django 模板语言测试代码 def template_test(request): name_list=["张三","李四",& ...

随机推荐

  1. jquery实现增删改(伪)-老男孩作业day13

    使用jquery进行,文件的编写,实现自增id,删除,添加,编辑模式. jquery放在本地,src="jquery_js.js" 可以改成其他,或者在线的路径 readme &l ...

  2. strcore.cpp(156) 内存泄漏

    vs搞了一个小工具涉及到线程 每次执行完退出的时候都会报 strcore.cpp(156) 的内存泄漏 原因是在线程内使用了CString 类型的传递参数 如果没有正常释放会报上面的错误.

  3. php 分页实现 和 php 大文件上传失败的处理方式

    1. php分页: 要想做php的分页,首先要弄清楚要什么样的分页,关系到哪些参数,参数之间怎么关联: 目标分页效果如下: 分析: 1.主要涉及两个参数:一个是当前输出页面的页码,用变量$p 表示,另 ...

  4. docker之数据卷管理

    转自:https://www.cnblogs.com/jsonhc/p/7777811.html docker之数据卷的备份和还原 1.现在利用镜像创建一个nginx的服务容器,并挂载一个数据卷 [r ...

  5. python笔记之强制函数以关键字参数传参

    最近学习python,学到了函数传参,看到了以下这个特殊情况,特此来做个笔记 def add(*, x, y): print(x, y) 以上函数定义后,该怎么传参?前面的那个*号是做什么用的? 我们 ...

  6. 【366】通过 python 求解 QP 问题

    参考: 9.3 凸优化 · 如何在 Python 中利用 CVXOPT 求解二次规划问题 参考: Quadratic Programming - Official website 步骤如下: 首先安装 ...

  7. vue中嵌套页面(iframe)

    vue中嵌套iframe,将要嵌套的文件放在static下面.(要将打包文件整体放在statici里,我的文件名是canvas) src可以使用相对路径,也可使用服务器根路径http:localhos ...

  8. requirejs源码分析

  9. 【转】Classful IPv4 addressing definition

    Classful addressing definition Class Leadingbits Size of networknumber bit field Size of restbit fie ...

  10. oracle RMAN使用

    一步一步学RMAN 备份 RMAN连接上ORACLE,WINDOWS下在命令模式下 RMAN TARGET / 连接本地数据库用的是本地认证模式.RMAN连接数据库必须在dedicate模式下.因此在 ...