欢迎来到夜的世界

莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生.料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。
扩大
缩小

自定义过滤器和标签

            自定义过滤器 和 标签           

过程 : 

  1 . 在 settings 中的 INSTALLED_APPS 配置当前app,不然 Django无法找到自定义的  simple_tag.

  2 . 在app中创建 templatetags 模块 (模块名只能是 templatetags)

 

  3 . 创建任意的 .py 文件,如 : cal.py (注意: .py 文件在一个项目中不允许名字重复)

from django.utils.safestring import mark_safe

from django.template import Library
register =Library()                #register的名字是固定的,不可改变


@register.filter                 #过滤器
def mul(x,y):
    return x*y
 
@register.filter                 #标签
def tag(val):
    return mark_safe("<a>%s</a>"%val)

@register.filter                   #过滤器
def lower(val):

    return val.lower()

@register.simple_tag          #标签 ,
def mul_tag(x,y,z):
    return x*y*z

   4 . 在使用自定义 simple_tag 和 filter 的html 文件中导入之前创建的 cal.py 

{% load cal %}

     过程 :  {% load cal %}  写完要重启项目,在请求的时候,Django会自动去寻找app下的 templatetags -->下的 cal.py文件,然后执行相应的函数

 

  5 . 使用simple_tag 和 filter (如何调用)

 过滤器 : {{ var|filter_name:参数}}  , 参数只能是两个,一个参数是变量 val , 一个参数是后面的那个参数.

标签 :   {% simple_tag 参数1 参数2...... %}

-------------------------------.html
{% load xxx %}  
      
# num=12
{{ num|multi:2 }} #24
 
{{ num|multi:"[22,333,4444]" }}   相当于复制了,吧[22,333,4444]乘了num遍
{% multitag 2 5 6 %} 参数不限,但不能放在if for语句中 {% simple_tag_multi num 5 %}

   自定义过滤器函数的参数只能是两个,可以进行逻辑判断

  自定义标签无参数限制,不能进行逻辑判断

{% if i|multi:5 > 1000 %}   <!-- 判断i*5>1000 -->
    <p>大于{{ i }}</p>
{% else %}
    <p>大于等于{{ i }}</p>
{% endif %}

 

1 . 自定义/默认的过滤器和标签存在的含义  : (为何不在视图函数中直接渲染到模板上?)

  避免写重复代码,定义共同的方法,自定义过滤器就可以在多个视图函数中取使用,render调用.

2 . 级联删除 :  一对一 / 一对多 / 多对多 

  被关联表叫主表,关联表叫从表,删除主表内容,从表内容被删除:反之不可以

3. 数据约束 : db_constraint=True. 建立约束+关系

  如果 db_constraint=False 就是只是单纯的建立关系.如果建立约束会使得某些想要删除的东西删除不了.但是单纯的建立联系却可以.

  但是如果不写 db_constraint=False,只是建立关系之后,Django的查询接口是不能用的,写 db_constraint=False . 可以使用查询接口.

  

 

posted on 2018-11-14 22:45  二十四桥_明月夜  阅读(236)  评论(0编辑  收藏  举报

导航