【问题标题】:Custom Django tag & jQuery自定义 Django 标签和 jQuery
【发布时间】:2011-03-03 05:53:21
【问题描述】:
我是 Django 新手。今天我创建了一些 Django 自定义标签,这并不难。但现在我想知道在我的自定义标签定义中包含一些 jQuery 或一些 Javascript 代码的最佳方法是什么。将自定义库包含到我的代码中的常规方法是什么?例如:
{% faceboxify item %}
所以假设它会为 Facebox 插件创建一个特定的 HTML 输出。我只是想学习一些优雅的方法来将此插件导入我的代码。我希望上述定义足以满足所有功能。有什么办法吗?我找不到任何例子。也许我错过了什么..
【问题讨论】:
标签:
jquery
python
django
django-custom-tags
【解决方案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
这应该可以解决问题。它不像在页面顶部包含依赖项那样优雅,但每次需要调用它们时不包含它们就足够了。