Django Widget Media не работает

Мне нужен виджет, который должен отображать только блок, потому что я добавлю функциональность с JQuery. Я пытаюсь включить javascript и таблицу стилей через класс Widget «Media», и он не работает для меня.

Вот код:

class StarsWidget(Widget):
    """
    Widget with stars for rating
    """
    class Media:
        js = (
                settings.MEDIA_URL + 'js/rating.js',
              )

        css = {
                'screen': (
                    settings.MEDIA_URL + 'css/rating.css',
                    )
              }


    def render(self, name, value, attrs=None):
        if value is None: value = ''

        attrs = {'id':'ratingX', 'class':'rating'}
        final_attrs = self.build_attrs(attrs, name=name)
        if value != '':
            # Only add the 'value' attribute if a value is non-empty.
            final_attrs['value'] = force_unicode(value)
        return mark_safe(u'<div %s ></div>' % flatatt(final_attrs))

Любые предложения или помощь будут оценены

13.10.2009 06:45:03
Проверьте сгенерированный (X) HTML, где ваш браузер ищет ваш JS / CSS. Это где вы ожидаете? Загружается ли он в этом месте, если вы пытаетесь загрузить его напрямую?
Dominic Rodger 13.10.2009 08:26:59
3 ОТВЕТА

К путям в «классе Media» автоматически добавляются параметры .MEDIA_URL. Так что попробуйте так:

class Media:
    js = ('js/rating.js',)
    css = {'screen': ('css/rating.css',),}

Если это не сработает, я предлагаю использовать FireBug или что-то в этом роде и проверить, может ли браузер загружать css и javascript.

На основании комментария: Похоже, что вы вообще не загружаете носитель с формой. Попробуйте добавить в шаблон:

{{ my_form.media }}

в {% block subheader%} (или куда бы вы ни загружали скрипты и css), где «my_form» - это имя экземпляра вашей формы, созданного в представлении.

4
13.10.2009 09:01:03
Спасибо за ответ, но MEDIA_URL не является проблемой. Когда я отлаживаю его в консоли Python, я получаю правильный вывод обратно, я имею в виду >>> widget.media, я думаю, что мне нужен специальный тег шаблона, который должен загружать все медиа форм без повторения их.
Xidobix 13.10.2009 07:18:05

Вы на самом деле куда-нибудь включаете медиа формы в свой шаблон?

{% block extrahead %}
  {{ form.media }}
{% endblock %}
39
13.10.2009 09:01:03
Это было не очень ясно в документах. Казалось, это происходит автоматически: «Каждый раз, когда CalendarWidget используется в форме, эта форма будет направлена ​​на включение CSS-файла pretty.css и файлов JavaScript animations.js и actions.js» docs.djangoproject.com/en /1.11/topics/forms/media/…
ThePhi 30.08.2017 12:37:55
Это имеет смысл, в некотором смысле (хотя в документах нет ясности по этому поводу): явный вызов {{ form.media }}позволяет добавлять сценарии и таблицы стилей за пределы тела html, что является хорошей практикой.
Régis B. 19.10.2018 09:48:04
Спас мой день! Было не очень ясно в официальном документе , хотя они указывают, .mediaбудут ли генерировать HTML-теги.
Shaung Cheng 30.04.2019 18:12:39

Незначительная оптимизация: вам не нужно предварительно добавлять настройки .MEDIA_URL к вашим путям, это выполняется автоматически при распечатке.

0
18.02.2010 08:40:27