2010-06-13 90 views
3

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

{% faceboxify item %} 

因此,假设它会为Facebox插件创建一个特定的HTML输出。我只想学习一些优雅的方式将这个插件导入到我的代码中。我希望上述定义对于所有功能都足够了。有什么办法可以做到吗?我找不到任何例子。也许我失去了一些东西..

回答

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 

这应该是关键。它不像在页面顶部包含依赖关系那样优雅,但每次需要调用它们时都不会包含它们。

+0

谢谢,我想这就是我正在寻找的..我会尽快尝试.. – pocoa 2010-06-13 16:37:57

0

你可以让你的自定义标签应用“class”值为你的Javascript寻找。将您的Javascript添加为常规.js <script>导入,并使用加载时函数来查找元素并根据需要操作它们。

因此,举例来说,如果你的标签创建<div>,你可以把它做到这一点:

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

你的JavaScript就可以做到这一点:

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

谢谢。我的问题是您的代码的第二部分,也是 然后:

pocoa 2010-06-13 16:06:24

+0

我想找到一种方法,将代码插入到通用的$(document)。就绪(函数()的第二部分{//此处}页面的功能和插入导入语句顶部 – pocoa 2010-06-13 16:10:14

+0

嗯,我不是Django的专家,所以我不能评论“最好”的方式来做到这一点。在我熟悉的模板系统中,我可能*不会*拥有标签代码写出'