当前位置: 首页 > 编程笔记 >

在Django中编写模版节点及注册标签的方法

宋宇
2023-03-14
本文向大家介绍在Django中编写模版节点及注册标签的方法,包括了在Django中编写模版节点及注册标签的方法的使用技巧和注意事项,需要的朋友参考一下

编写模板节点

编写自定义标签的第二步就是定义一个拥有 render() 方法的 Node 子类。 继续前面的例子,我们需要定义 CurrentTimeNode :

import datetime

class CurrentTimeNode(template.Node):
 def __init__(self, format_string):
  self.format_string = str(format_string)

 def render(self, context):
  now = datetime.datetime.now()
  return now.strftime(self.format_string)

这两个函数( __init__() 和 render() )与模板处理中的两步(编译与渲染)直接对应。 这样,初始化函数仅仅需要存储后面要用到的格式字符串,而 render() 函数才做真正的工作。

与模板过滤器一样,这些渲染函数应该静静地捕获错误,而不是抛出错误。 模板标签只允许在编译的时候抛出错误。
注册标签

最后,你需要用你模块的Library 实例注册这个标签。 注册自定义标签与注册自定义过滤器非常类似(如前文所述)。 只需实例化一个 template.Library 实例然后调用它的 tag() 方法。 例如:

register.tag('current_time', do_current_time)

tag() 方法需要两个参数:

  1.     模板标签的名字(字符串)。
  2.     编译函数。

和注册过滤器类似,也可以在Python2.4及其以上版本中使用 register.tag装饰器:

@register.tag(name="current_time")
def do_current_time(parser, token):
 # ...

@register.tag
def shout(parser, token):
 # ...

如果你像在第二个例子中那样忽略 name 参数的话,Django会使用函数名称作为标签名称。

 类似资料:
  • ENS中的注册中心就是一个拥有某个域名所有权的合约,并根据合约代码中定义的一组规则分配它的子域名。一个"先到先得"式的简易合约如下: contract FIFSRegistrar { ENS ens; bytes32 rootNode; function FIFSRegistrar(address ensAddr, bytes32 node) { ens

  • 我准备好为此拔掉头发了。我正在开发游戏图形用户界面,它有一个由网格单元组成的地图。 单元格网格由StackPane组成,然后由ImageView或Shapes等组成的几个层组成。 整个内容包含在GridPane中,GridPane包含BorderPane的中心元素; 我不能在底层场景中添加鼠标事件,因为所有节点都会得到它- 下面是创建堆栈的代码: 这是设置EventHandler的代码- 谢谢你的

  • 问题内容: 有什么方法可以从jenkins API中提取节点标签?该标准: 似乎没有任何标签信息。在其他地方吗? 问题答案: 显然,节点标签是节点配置的一部分,因此它们存在于 这是我的技巧,可通过python jenkinsapi(类似于作业配置)从

  • 问题内容: 我一直在使用此d3项目中的示例代码来学习如何显示d3图形,但似乎无法使文本显示在圆圈的中间)。我看过其他示例并尝试添加 和 在定义了节点之后,但是当我将鼠标悬停在每个节点上时,我看到的唯一结果是显示“要显示的节点名称”。它没有显示为圆圈内的文本。我是否需要编写自己的svg文本对象,并根据圆的半径确定需要放置的svg文本对象的坐标?从其他两个示例来看,似乎d3已经以某种方式进行了处理。我

  • 问题内容: 假设我有一个文件。我怎么写“你好” TAB“ alex”? 问题答案: 这是代码: 字符串的内部是水平制表符的转义序列。

  • 启动selenium网格的节点时出现以下错误- 与当前平台不匹配:MAC 我的本地系统是hub,包含MAC和FIREFOX 下面是我的节点(VM)的配置。我的脚本在我的本地机器hub上- 请建议需要的。

  • 问题内容: 我在Django模板中使用static模板标签: 但是,我需要使用的是文件名,该文件名是模型对象的属性(即,我将其作为上下文传递到此模板。但是,如何在静态模板标记中包含该文件名呢?这会引发错误)。 有办法吗? 问题答案: 您可以在静态模板标记中使用use变量。请注意,您不需要或

  • 问题内容: 我可以在Javascript中使用Django的模板标签吗?就像在jQuery中使用动态向页面添加表单一样。 问题答案: 是的,我经常这样做。您的javascript必须通过django提供,但是如果您只是将html标头中的javascript作为内联javascript放上了,那就可以了。 例如:我用它在我使用的动态表单上加上前缀。 请注意,在“ base.html”中,我有一个ht