自定义 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的主要内容,如果未能解决你的问题,请参考以下文章