【问题标题】:Django Widget Media doesn't workDjango 小部件媒体不起作用
【发布时间】:2010-12-06 05:22:06
【问题描述】:

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

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

【问题讨论】:

  • 检查生成的 (X)HTML 以了解您的浏览器在哪里寻找您的 JS/CSS。它在你期望的地方吗?如果您尝试直接加载它,它会在该位置加载吗?

标签: django django-widget


【解决方案1】:

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

{% block extrahead %}
  {{ form.media }}
{% endblock %}

【讨论】:

  • 在文档中不是很清楚。它似乎是自动的:“每次在表单上使用 CalendarWidget 时,该表单将被定向到包含 CSS 文件 pretty.css,以及 JavaScript 文件 animations.js 和 actions.js”docs.djangoproject.com/en/1.11/topics/forms/media/…
  • 这在某种程度上是有道理的(尽管文档并不清楚):明确调用 {{ form.media }} 允许您在正文 html 之外添加脚本和样式表,这是一个很好的做法。
  • 拯救了我的一天!不是很清楚in the official doc,虽然他们确实指定.media会生成html标签。
【解决方案2】:

“媒体类”中的路径会自动添加 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”是在视图中创建的表单实例的名称。

【讨论】:

  • 感谢答案,但 MEDIA_URL 不是问题。当我在 python 控制台中调试它时,我得到了正确的输出,我的意思是 >>> widget.media 我认为我需要一个特殊的模板标签,它应该加载表单的所有媒体而不重复它们。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多