zoukankan      html  css  js  c++  java
  • 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对象的?

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

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

    下面看一段简单的代码

    首先,我们在app01文件夹下创建一个templatetags目录,然后在创建xxoo.py

    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个注意事项

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

      2、settings.py文件中,注册app,本文自创建app01,所以在INSTALLED_APPS = ['app01']

      3、在app01目录下创建目录templatetags,注意必须在app01目录下

      4、创建template对象时,变量名固定,必须register,必须为register,必须为register

      5、必须重启服务

    接下来神奇的事情发生了

    进阶

    在之前基础上,我们加上参数

    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个,而且不能有空格,其他的只能通过字符串拼接,然后在分割

  • 相关阅读:
    SVN自动更新测试服务器工作副本(C#写winform程序实现)
    两台服务器上SQL Server数据库数据互操作示例
    ASP.NET根据URL生成网页缩略图示例程序(C#语言)
    Flutter Widget API
    BPM、BPMN、BPMN2.0概念介绍
    H5多图上传调研
    lIUNX如何加载U盘,光盘
    如何解决exchange2003被中继的问题?(网上转载)
    window无法安装服务
    如何在WORD里面插入不同的页眉和页脚
  • 原文地址:https://www.cnblogs.com/it-q/p/9396271.html
Copyright © 2011-2022 走看看