自定义 Django 标签和 jQuery

Posted

技术标签:

【中文标题】自定义 Django 标签和 jQuery【英文标题】:Custom Django tag & jQuery 【发布时间】:2011-03-03 05:53:21 【问题描述】:

我是 Django 新手。今天我创建了一些 Django 自定义标签,这并不难。但现在我想知道在我的自定义标签定义中包含一些 jQuery 或一些 javascript 代码的最佳方法是什么。将自定义库包含到我的代码中的常规方法是什么?例如:

% faceboxify item %

所以假设它会为 Facebox 插件创建一个特定的 html 输出。我只是想学习一些优雅的方法来将此插件导入我的代码。我希望上述定义足以满足所有功能。有什么办法吗?我找不到任何例子。也许我错过了什么..

【问题讨论】:

【参考方案1】:

您可以让您的自定义标签为您的 Javascript 应用“类”值来查找。将您的 Javascript 作为常规 .js <script> 导入包含在内,并让它使用加载时函数来查找您的元素并根据需要对其进行操作。

例如,如果您的标签创建了<div>,您可以让它这样做:

<div class='faceboxify'>
  <!-- whatever -->
</div>

然后您的 Javascript 可以执行此操作:

$(function() 
  $('div.faceboxify').each(function() 
    // ... stuff to be done to your "faceboxify" divs
  );
);

【讨论】:

谢谢。我的问题是代码的第二部分,也是 然后: 【参考方案2】:

从documentation可以看出,编写模板标签涉及编写目标函数和渲染器。所以我假设您当前的代码如下所示:

def my_tag(parser, token):
  # ... some code
  return MyNode(...)

class MyNode(template.Node):
  def render(self, context):
     # here is where you write your <script> tags

所以基本上你要做的就是在上下文下挂一个变量,这样你就可以知道你是否已经包含了代码来加载所有需要的脚本。

class MyNode(template.Node):
  def render(self, context):
     if '_included_faceboxify_deps' in context:
       # render your <script> dependency includes
       context['_included_faceboxify_deps'] = True
     # render your <script>s that are specific for this call

这应该可以解决问题。它不像在页面顶部包含依赖项那样优雅,但每次需要调用它们时不包含它们就足够了。

【讨论】:

以上是关于自定义 Django 标签和 jQuery的主要内容,如果未能解决你的问题,请参考以下文章

django自定义模板标签和过滤器

Django(自定义过滤器和自定义标签)

Django:如何查看已定义的自定义标签?

在自定义模板标签中解析 Django 自定义模板标签

Django 自定义标签

Django 自定义模板标签和模板加载器