11

我需要一个小部件,它应该只显示一个块,因为我将使用 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))

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

4

3 回答 3

45

您实际上是否在模板中的任何地方都包含了表单媒体?

{% block extrahead %}
  {{ form.media }}
{% endblock %}
于 2009-10-13T09:01:03.813 回答
4

“媒体类”中的路径会自动添加 settings.MEDIA_URL。所以试试这样:

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

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

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

{{ my_form.media }}

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

于 2009-10-13T07:07:38.253 回答
0

次要优化:您不需要在路径前添加 settings.MEDIA_URL,它会在打印出来时自动完成。

于 2010-02-18T08:40:27.590 回答