zoukankan      html  css  js  c++  java
  • 自定义标签

    五:自定义标签

    1.建立项目,app的不说。只要在随意一个app中建立上文提到的templatetags文件夹。

    这里是有点不理解的地方,在任意一个app建立的tags别的app能够使用吗?起初对此很疑惑。以为在一个app下建立的tags就这一个app能使用。为了大家都能够使用自己定义的tags,我还想把templatetags单独拿出来,跟普通app在项目当中是平级地位。这种思路搞了很久发现行不通。无奈只好打算使用copy在每一个app都复制一份templatetags。(当然这只是我起初的错误想法)但后来发现,居然一个app中有,其他的app中就可以直接使用此自定义的文件了。只需要在需要的模板当中(不管模板是在你的那个app中)调用load语句将自定义的文件load进来便可以。

    随后看了看一些文档,只要templatetags所在位置是settings.py中INSTALLED_APPS中配置过的,或是在TEMPLATE_DIRS配置过的,任意一个位置便可以。

    一定记得要在templatetags文件夹中包含__init__.py文件。空文件便可。


     

    Django编译一个模板时,它将原始模板分成一个个 节点 。每个节点都是 django.template.Node 的一个实例,并且具备 render() 方法。 于是,一个已编译的模板就是 节点 对象的一个列表。 例如,看看这个模板:

    1
    2
    3
    4
    5
    6
    7
    8
    Hello, {{ person.name }}.
     
    {% ifequal name.birthday today %}
      Happy birthday!
    {% else %}
      Be sure to come back on your birthday
      for a splendid surprise message.
    {% endifequal %}

    被编译的模板表现为节点列表的形式:

    •     文本节点: "Hello, "
    •     变量节点: person.name
    •     文本节点: ". "
    •     IfEqual节点: name.birthday和today

    当你调用一个已编译模板的 render() 方法时,模板就会用给定的context来调用每个在它的节点列表上的所有节点的 render() 方法。 这些渲染的结果合并起来,形成了模板的输出。 因此,要自定义模板标签,你需要指明原始模板标签如何转换成节点(编译函数)和节点的render()方法完成的功能 。


     
    这个要在templatetags里面进行定义
    upper.py
    //
    classUpperNode(template.Node): 继承template.Node类
    def __init__(self,nodelist):
    self.nodelist=nodelist
    def render(self, context): 调用render处理方法
    content = self.nodelist.render(context) 用render处理context
    return content.lower() 将作用与节点当中的内容,不仅仅是变量
    def upper(parser, token):第一个参数是模板内容,第二个参数是参数列表
    nodelist = parser.parse("endupper") 取节点当中的内容
    parse.delete_first_token() 删除第一个参数,因为第一个参数是自己的名字upper
    renturn UpperNode(nodelist) 传递到UpperNode当中
     
    还需要注册一下
    在html当中使用upper标签的时候要先load进来
    {%load upper %}
    {% upper %}
    {% endupper %}
     





  • 相关阅读:
    Spring视频学习笔记(一)
    枚举(enum)与类的静态成员(static)
    Java的继承模式
    HTML锁定Table中某一列
    Winform 中的KeyDown
    我的WebService入门
    获取键盘或鼠标多久没有对屏幕进行操作了
    从DB输出值到DataTable时,字段值为NULL时报错相关信息;
    Data层相关问题 & JS循环取值
    字符串String的trim()方法
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5749563.html
Copyright © 2011-2022 走看看