模板语言自定义方法介绍

自定义方法注意事项

Django中有simple_tag 和 filter 两种自定义方法,之前也提到过,需要注意的是

  1. 扩展目录名称必须是templatetags
  2. templatetags中的自定义标签和过滤器必须依赖于一个django app,也就是说,自定义标签和过滤器是绑定app的。该app应该包含一个templatetags目录,这个目录一个和model.py,views.py在同一个层级
  3. 包含templatetags目录的app一定要在INSTALLED_APPS列表里面
  4. 在页面中使用{% load %}加载扩展方法,load的是模块名,而不是app名
  5. 记得使用 from django import template ,register=template.Library()注册

simple_tag 和 filter 的区别

  • simple_tag:可以有多个参数,一般是做数据处理,但不能做if判断语句
  • filter:一般只能有1个参数(可以字符串切割,变通为多个参数),过滤器,一般是return true或者false,可以和if判断语句使用.在过滤器 {{ var|foo:"bar" }} 中 ,过滤器 foo 会被传入变量 var 和默认参数 bar。过滤器函数应该总有返回值

使用方法

目录结构

xx.py代码:

#需要从django中导入一些模块
from django import template
from django.utils.safestring import mark_safe from django.template.base import resolve_variable, Node, TemplateSyntaxError register = template.Library() @register.filter def detail1(value,arg): """ 查看余数是否等于remainder arg="1,2" :param counter: :param allcount: :param remainder: :return: """ allcount, remainder = arg.split(',') allcount = int(allcount) remainder = int(remainder) if value%allcount == remainder: return True return False @register.simple_tag def my_simple_time(v1,v2,v3): return v1 + v2 + v3

simple_tag 页面使用

{% load xx %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% my_simple_time 1 2 3 %} </body> </html>

filter 页面使用

{% load xx %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ 23|detail4:"4,0" }} {% if 23|detail4:"4,0" %} <h1>123</h1> {% endif %} </body> </html>

页面实现瀑布流

布局介绍

由于图片有大有小,所以为了页面的整齐,没有空隙,可以将页面body主体分为4列,每一列依次往下排列图片和介绍即可.

由于页面是从左到右排序的,所以我们可以将图片的列队索引+1后除以4后得到的余数,就是所在页面中所在的列数,所以可以使用python中的div()函数来处理.

代码

扩展方法代码:xx.py 文件

from django import template
from django.utils.safestring import mark_safe
from django.template.base import resolve_variable, Node, TemplateSyntaxError register = template.Library() @register.filter def detail1(value,arg): """ 查看余数是否等于remainder arg="1,2" :param counter: :param allcount: :param remainder: :return: """ allcount, remainder = arg.split(',') allcount = int(allcount) remainder = int(remainder) if value%allcount == remainder: return True return False

views.py范例

from django.shortcuts import render# Create your views here.def student(request): img_list = [ {'src': '1.jpg', 'title': 'asdfasdfasdf','content': 'asdf'},# 1 {'src': '2.jpg', 'title': 'asdfasdfasdf','content': 'asdf'},# 2 {'src': '3.jpg', 'title': 'asdfasdfasdf','content': 'asdf'}, {'src': '4.jpg', 'title': 'asdfasdfasdf','content': 'asdf'}, {'src': '18.jpg', 'title': 'asdfasdfasdf','content': 'asdf'},# 5 {'src': '21.jpg', 'title': 'asdfasdfasdf','content': 'asdf'}, ] return render(request, 'student.html', {"img_list":img_list})

html页面代码

{% load xx %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> .container{ width: 980px; margin: 0 auto; } .container .column{ float: left; width: 245px; } .container .item img{ width: 245px; } </style> </head> <body> <div class="container"> <div class="column"> {% for i in img_list %} {% if forloop.counter|detail1:"4,1" %} <div class="item"> {{ forloop.counter }} <img src="/static/{{ i.src }}"> </div> {% endif %} {% endfor %} </div> <div class="column"> {% for i in img_list %} {% if forloop.counter|detail1:"4,2" %} <div class="item"> {{ forloop.counter }} <img src="/static/{{ i.src }}"> </div> {% endif %} {% endfor %} </div> <div class="column"> {% for i in img_list %} {% if forloop.counter|detail1:"4,3" %} <div class="item"> {{ forloop.counter }} <img src="/static/{{ i.src }}"> </div> {% endif %} {% endfor %} </div> <div class="column"> {% for i in img_list %} {% if forloop.counter|detail1:"4,0" %} <div class="item"> {{ forloop.counter }} <img src="/static/{{ i.src }}"> </div> {% endif %} {% endfor %} </div> </div> </body> </html>

转载于:https://www.cnblogs.com/zxmbky/p/9769153.html

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

  1. Django模板语言

    常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊的含义, ...

  2. Django模板语言相关内容

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

  3. Django模板语言(译)

    原文地址:https://docs.djangoproject.com/zh-hans/2.1/ref/templates/language/ 翻译日期:2019年3月8日-2019年3月9日 by: ...

  4. 小白必看!Django 模板语言基础来啦

    作者 | 单雨 责编 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 前言 为了实现模板封装和复用,提高HTML界面调试便捷性以及前后端解耦等目标,Django定义了自己的网络模板语言. 当 ...

  5. Django模板语言 以及使用

    Django 模板语言 文章目录 Django 模板语言 模板的传参 模板的变量 XSS攻击 反射型xss 存储型xss DOM xss 模板的标签 过滤器 模板的继承 url 反向解析 模板的传参 ...

  6. php里面smarty模板,如何在smarty模板语言中使用php代码

    这篇文章主要介绍了关于 如何在smarty模板语言中使用php代码,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 借助于两个smarty内建函数. 1. inluce_php 函数用于 ...

  7. MVC中使用Action全局过滤器出现:网页无法正常运作 将您重定向的次数过多。解决办法

    今天用本地测试出现将您重定向的次数过多的错误提示,搜索到这篇文章,大概看懂了意思. 我自己的是tp的登录页面提示重定向,我查到问题是logincontroller.class.php 前面继承了com ...

  8. HTML期末大作业~简单的程序员个人博客网站模板源码(HTML+CSS)~个人主页博客web网页设计制作~HTML简单个人网页制作~Web大学生网页成品...

    HTML期末大作业~ 简单的程序员个人博客网站模板源码(HTML+CSS)~学生HTML个人网页作业作品下载 ~个人主页博客网页设计制作 ~大学生个人网站作业模板 ~简单个人网页制作 临近期末, 你还 ...

  9. Django(模板语言-自定义filter和simple_tag)

    filter过滤器的主要形式:变量|函数,意思是将变量交给函数处理,而自定义filter就是自己定义函数,因为用到已有的很少. 1.在当前app中创建templatetags模块(包:带__init_ ...

最新文章

  1. recover 没有捕获异常_GO语言异常处理机制panic和recover分析
  2. 如何用Transformer来做目标检测?一文简述DERT及其变体
  3. 收藏的RabbitMQ资料,分享给大家
  4. Android官方开发文档Training系列课程中文版:Activity测试之UI组件测试
  5. NeurIPS 2021 Transformer部署难?北大华为诺亚提出Vision Transformer的后训练量化方法...
  6. 嵌入式Linux系统编程学习之五gcc/g++编译器
  7. uestc--758--P酱的冒险旅途
  8. php定量,javascript - js 无序数组 任意个数 相加之和为定量m?
  9. js中获取当前屏幕宽度方法如下:
  10. wireshark抓包分析怎么看进程_教大家wireshark抓包数据怎么看
  11. 部分无法打开的pdf文件处理方法
  12. Spring和SpringMVC配置中父子WebApplicationContext的关系
  13. 云计算如何从谷歌诞生的?
  14. 泛在网作业-----码分多址通信
  15. glog --- C++日志库
  16. 图解希尔排序(Shell Sort)
  17. 22家安卓应用商店名单
  18. 悼念512汶川大地震遇难同胞——来生一起走(dfs+打表)
  19. 性能调优之三十六计 —— 「取而代之」Echo/Json 篇
  20. C# webBrowser 通过代理访问网页

热门文章

  1. 字符串 hash 唯一数字_【数字课堂】酒妹带你了解“身份认证技术”
  2. python为什么是动态语言_python为什么是动态语言
  3. 为什么生产环境都是linux,关于生产环境linux系统中的wheel用户组
  4. org.springframework.beans.factory.BeanDefinitionStoreExcept
  5. Map类集合K/V能不能存储null值的情况
  6. Idea中Terminal中git基本操作
  7. 电脑知识:电脑无法开机解决方案,赶紧收藏吧!
  8. APP技巧:微信中这6个设置建议关闭,可以防止个人信息或将全暴露,赶快看一看吧!...
  9. 后端:50 个 经典 Spring 面试题,值得收藏!
  10. 后端:Java 中 10 大坑爹功能!