Django: лучший способ добавить Javascript в пользовательские виджеты

Я пишу пользовательский виджет, который требует некоторого поддерживающего кода JavaScript, который мне нужен для вывода.

Варианты:

  1. Сделайте дамп сразу после HTML-кода.
  2. Добавьте его к носителю формы.
  3. Добавить его в глобальный onReady раздел.

Мой инстинкт инстинкта - избегать таких вещей, как:

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

Вместо этого я выбрал пункт 3) совсем недавно в моих проектах PHP. У Django есть хороший способ сделать 2 или 3? Я надеюсь, что смогу использовать эту методологию из контекста моего виджета render функция. Это может исключить вариант 2), если мой виджет не имеет представления о форме, в которой он находится.

1 ответ

Решение

Посмотрите на форму СМИ http://docs.djangoproject.com/en/dev/topics/forms/media/

Если вы хотите добавить встроенный код JavaScript под полем формы Django, вы можете добавить перезапись 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.

Другие вопросы по тегам