【问题标题】: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
    

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

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 2010-10-10
      • 2011-07-11
      • 1970-01-01
      • 2015-02-28
      • 2011-09-16
      • 2021-07-13
      • 2020-01-24
      • 2011-12-19
      相关资源
      最近更新 更多