在Python的Django框架中编写编译函数

 更新时间:2015年07月20日 15:53:29   投稿:goldensun  
这篇文章主要介绍了在Python的Django框架中编写编译函数,配合模版标签在模版中进行使用<需要的朋友可以参考下

当遇到一个模板标签(template tag)时,模板解析器就会把标签包含的内容,以及模板解析器自己作为参数调用一个python函数。 这个函数负责返回一个和当前模板标签内容相对应的节点(Node)的实例。

例如,写一个显示当前日期的模板标签:{% current_time %}。该标签会根据参数指定的 strftime 格式(参见:http://www.djangoproject.com/r/python/strftime/)显示当前时间。首先确定标签的语法是个好主意。 在这个例子里,标签应该这样使用:

<p>The time is {% current_time "%Y-%m-%d %I:%M %p" %}.</p>

注意

没错, 这个模板标签是多余的,Django默认的 {% now %} 用更简单的语法完成了同样的工作。 这个模板标签在这里只是作为一个例子。

这个函数的分析器会获取参数并创建一个 Node 对象:

from django import template

register = template.Library()

def do_current_time(parser, token):
  try:
    # split_contents() knows not to split quoted strings.
    tag_name, format_string = token.split_contents()
  except ValueError:
    msg = '%r tag requires a single argument' % token.split_contents()[0]
    raise template.TemplateSyntaxError(msg)
  return CurrentTimeNode(format_string[1:-1])

这里需要说明的地方很多:

    每个标签编译函数有两个参数,parser和token。parser是模板解析器对象。 我们在这个例子中并不使用它。 token是正在被解析的语句。

    token.contents 是包含有标签原始内容的字符串。 在我们的例子中,它是 'current_time "%Y-%m-%d %I:%M %p"' 。

    token.split_contents() 方法按空格拆分参数同时保证引号中的字符串不拆分。 应该避免使用 token.contents.split() (仅使用Python的标准字符串拆分)。 它不够健壮,因为它只是简单的按照所有空格进行拆分,包括那些引号引起来的字符串中的空格。

    这个函数可以抛出 django.template.TemplateSyntaxError ,这个异常提供所有语法错误的有用信息。

    不要把标签名称硬编码在你的错误信息中,因为这样会把标签名称和你的函数耦合在一起。 token.split_contents()[0]总是记录标签的名字,就算标签没有任何参数。

    这个函数返回一个 CurrentTimeNode (稍后我们将创建它),它包含了节点需要知道的关于这个标签的全部信息。 在这个例子中,它只是传递了参数 "%Y-%m-%d %I:%M %p" 。模板标签开头和结尾的引号使用 format_string[1:-1] 除去。

    模板标签编译函数 必须 返回一个 Node 子类,返回其它值都是错的。

相关文章

  • python lazypredict构建大量基本模型简化机器学习

    python lazypredict构建大量基本模型简化机器学习

    这篇文章主要介绍了python lazypredict构建大量基本模型简化机器学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • jupyter notebook中图片显示不出来的解决

    jupyter notebook中图片显示不出来的解决

    这篇文章主要介绍了jupyter notebook中图片显示不出来的解决操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 使用matplotlib动态刷新指定曲线实例

    使用matplotlib动态刷新指定曲线实例

    这篇文章主要介绍了使用matplotlib动态刷新指定曲线实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python数据类型--字典dictionary

    Python数据类型--字典dictionary

    这篇文章主要介绍了Python数据类型字典dictionary,字典是另一种可变容器模型,且可存储任意类型对象。下面详细内容需要的小伙伴可以参考一下,希望对你有所帮助
    2022-02-02
  • python目标检测yolo2详解及预测代码复现

    python目标检测yolo2详解及预测代码复现

    这篇文章主要为大家介绍了python目标检测yolo2详解及其预测代码复现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python的数据结构与算法的队列详解(3)

    Python的数据结构与算法的队列详解(3)

    这篇文章主要为大家详细介绍了Python的队列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Python身份运算符is与is not区别用法基础教程

    Python身份运算符is与is not区别用法基础教程

    这篇文章主要为大家介绍了Python身份运算符is与is not区别用法基础教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Python图像处理之图像与视频处理基础教程

    Python图像处理之图像与视频处理基础教程

    这篇文章主要介绍了Python图像处理之图像与视频处理基础教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • python实现简单飞行棋

    python实现简单飞行棋

    这篇文章主要为大家详细介绍了python实现简单飞行棋,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • pycharm 快速解决python代码冲突的问题

    pycharm 快速解决python代码冲突的问题

    这篇文章主要介绍了pycharm 快速解决python代码冲突的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论