zoukankan      html  css  js  c++  java
  • Django 模版语法 三

    使用自定义simple_tag

    在 app01 下面创建 templatetags 文件夹,在创建 my_tag.py 文件,内容如下:

    from django import template
    from django.utils.safestring import mark_safe
    
    register = template.Library() # register的是固定变量名,不能改变
    
    @register.simple_tag
    def my_add100(v1):
        return v1 + 100
    

    修改 login.html 文件

    ...
    {% my_add100 4 %}
    
    {% my_add 10 11 12 %}
    

    修改 settings.py 文件

    # 添加
                'libraries':{
                    "my_tag":"app01.templatetags.my_tag",
    

    位置如下

    运行效果如下:

    使用自定义 filter

    修改 my_tag.py 文件

    from django import template
    from django.utils.safestring import mark_safe
    
    register = template.Library() # register的是固定变量名,不能改变
    
    # filter 参数不能超过两个
    @register.filter
    def my_add100(v1, v2):
        return v1 + 100 + v2
    
    # simple_tag 不能用于if 语句
    @register.simple_tag
    def my_add(v1,v2,v3):
        return v1 + v2 + v3
    

    修改 login.html 文件

    ....
    {{ num | my_add100:8 }}
    ...
    
    

    修改 views.py 文件

    ........
    def login(req):
        if req.method=="POST":
            return HttpResponse("ok")
    
        num = 100
    
        return render(req, "login.html", locals())
    

    运行效果如下:

    {% if %} 的使用

    修改 login.html 文件

    ......
    {% if num|my_add100:34 > 100 %}
        <p>大于100</p>
    {% elif num|my_add100:34 < 100 %}
        <p>小于100</p>
    {% else %}
        <p>等于100</p>
    {% endif %}
    
    

    总结:

    simple_tag : 可以传多个参数, 不能用于 if for 语句
    filter : 最多两个参数

  • 相关阅读:
    redis几种模式的部署(Windows下实现)
    servlet容器:jetty,Tomcat,JBoss
    redis三种模式对比
    Linux expect详解
    expect学习笔记及实例详解
    shell expect的简单实用
    【Spring Boot】内嵌容器
    java 怎么让打印信息换行?
    Java中的静态方法是什么?
    java的接口为什么不能实例化
  • 原文地址:https://www.cnblogs.com/klvchen/p/10839424.html
Copyright © 2011-2022 走看看