django基础篇04-自定义simple_tag和fitler

自定义simple_tag

  • app目录下建立templatetags目录
  • templatetags目录下建立xxpp.py
  • 建立template对象register,注意变量名必须为register
  • @register.simple_tag
    def func(arg1,arg2):
        pass
  • settings.py文件中注册app,INSTALLED_APPS = ['app']
  • 模版文件顶部{% load xxoo %}
  • {{ 函数名 参数一 参数二}}

django如何传递参数给template对象的?html

没错,就是经过views.py的函数传递,例如 render(request,'xxx.html',{'xx':'oo'}),还有其余的方式吗?其实还有url的方式传递参数,这里再也不赘述django

今天,咱们讲解一下template对象,如何与py进行交互,这里的py是指单独的py文件,而不是基于django的py文件app

下面看一段简单的代码

首先,咱们在app01文件夹下建立一个templatetags目录,而后在建立xxoo.pyide

from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def simple_01(): return 'Python'
xxoo.py

 而后模板文件index.html函数

{% load xxoo %} <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <div> {% simple_01 %} </div>
</body>
</html>
index.html

注意:自定义simple_tag的4个注意事项url

  一、在模版文件中 {% load py文件 %}
spa

  二、settings.py文件中,注册app,本文自建立app01,因此在INSTALLED_APPS = ['app01']
3d

  三、在app01目录下建立目录templatetags,注意必须在app01目录下
code

  四、建立template对象时,变量名固定,必须register,必须为register,必须为register
htm

  五、必须重启服务

接下来神奇的事情发生了

进阶

在以前基础上,咱们加上参数

from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def simple_02(a,b): return a + b
xxoo.py
{% load xxoo %} <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div> {% simple_02 1 2 %} </div>
</body>
</html>
index.html

自定义filter

  • app目录下建立templatetags目录
  • templatetags目录下建立xxoo.py文件
  • 建立template的register对象,注意变量名必须为register
  • @register.filter
    def func(arg1,arg2):
        pass
  • settings.py中注册app,INSTALLED_APPS = ['app']
  • 模版文件顶部{% load xxoo %}
  • {{ 参数一|函数名:'参数二,参数三'}}  {{ 参数一|函数名:参数二 }},注意:函数名和参数二之间不能有空格
from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter
def simple_03(a,b):
    return a +'-'+ b
xxoo.py
{% load xxoo %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        {{ '张杰'|simple_03:'谢娜' }}
    </div>
</body>
</html>
index.html

自定义simple_tag和filter的优缺点

simple_tag

优势:能够传多个参数

缺点:不能做为if语句的条件

filter

优势:能够做为if语句的条件

缺点:参数最多只能传2个,并且不能有空格,其余的只能经过字符串拼接,而后在分割

相关文章
相关标签/搜索