Django:将Javascript添加到自定义小部件的最佳方式

时间:2010-02-09 03:05:14

标签: django widget

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

选项包括:

  1. 在HTML代码后立即转储。
  2. 将其附加到表单的媒体上。
  3. 将其附加到全球onReady部分。
  4. 我的直觉是避免这样的事情:

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

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

2 个答案:

答案 0 :(得分:11)

答案 1 :(得分:0)

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

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的表单字段下方显示右侧。