Django Widget Media不起作用

Xid*_*bix 9 django django-widget

我需要一个小部件,它应该只显示一个块,因为我将使用jQuery添加功能.我试图通过Widget的"媒体"类包含javascript和样式表,它对我不起作用.

这是代码:

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))
Run Code Online (Sandbox Code Playgroud)

任何建议或帮助将不胜感激

Dan*_*man 38

您是否真的在任何地方将模板媒体包含在模板中?

{% block extrahead %}
  {{ form.media }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

  • 在文档中不是很清楚.它似乎是自动的:"每次在表单上使用CalendarWidget时,该表单将被定向为包含CSS文件pretty.css,以及JavaScript文件animations.js和actions.js"https://docs.djangoproject .COM/EN/1.11 /主题/表格/媒体/#资产作为一种静态清晰度 (6认同)

Dan*_*nik 4

“class Media”中的路径会自动在前面添加 settings.MEDIA_URL。所以尝试这样:

class Media:
    js = ('js/rating.js',)
    css = {'screen': ('css/rating.css',),}
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,我建议使用 FireBug 或类似的东西并检查浏览器是否能够加载 css 和 javascript。

根据评论:看来您根本没有加载表单媒体。尝试在模板中添加:

{{ my_form.media }}
Run Code Online (Sandbox Code Playgroud)

在 {% block subheader %} 中(或加载脚本和 CSS 的任何位置),其中“my_form”是在视图中创建的表单实例的名称。