【问题标题】:Django: Best Way to Add Javascript to Custom WidgetsDjango:将 Javascript 添加到自定义小部件的最佳方式
【发布时间】:2010-02-09 03:05:13
【问题描述】:

我正在编写一个自定义小部件,它需要一些我需要输出的支持 JavaScript 代码。

选项有:

  1. 在 html 代码之后直接转储它。
  2. 将其附加到表单的媒体中。
  3. 将其附加到全局 onReady 部分。

我的直觉是避免以下事情:

<!-- original widget output -->
<input id="date" />
<-- Appended javascript -->
<script type="text/javascript">
jQuery('#date').datepicker()
</script> 

相反,我最近在我的 PHP 项目中选择了第 3) 项。 Django有做2或3的好方法吗?我希望我可以从我的小部件的 render 函数的上下文中使用这种方法。如果我的小部件不知道它所在的表单,这可能会排除选项 2)。

【问题讨论】:

    标签: django widget


    【解决方案1】:

    如果您正在考虑在 Django 表单字段下方添加一些内联 JavaScript,您可以在表单字段上添加覆盖 render 方法。下面我创建了一个自定义输入字段,抓取呈现的 HTML 并将新的 &lt;script&gt;...&lt;/script&gt; 附加到输出。

    from django import forms
    from django.utils.safestring import mark_safe
    
    class CustomInputField(forms.TextInput):
    
        def render(self, name, value, attrs=None, renderer=None):
            html = super().render(name, value, attrs)
            inline_code = mark_safe(
                "<script>jQuery('#date').datepicker()</script>"
            )
            return html + inline_code
    

    这将把右下方的表单字段放在 HTML 中。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 呃。嗯,这很明显;) 关于这一点的一件事是它能够包含文件,但似乎没有能力在它旁边附加一个独特的脚本块。我可以改变我的方法并使用基于类的选择器来附加,在这种情况下,jQuery datepickers。
      • 我知道这是在最初的问题之后的几年,但是动态脚本呢?这只会添加脚本文件,但是说我想添加像$(#S_1).datetimepicker({S_2}) 这样的脚本,并且我以编程方式构造字符串 S_1 和 S_2?
      猜你喜欢
      • 2015-11-19
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多