我需要一个小部件,它应该只显示一个块,因为我将使用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))
任何建议或帮助将不胜感激
答案 0 :(得分:34)
您是否真的在任何地方将模板媒体包含在模板中?
{% block extrahead %}
{{ form.media }}
{% endblock %}
答案 1 :(得分:3)
“类媒体”中的路径会自动添加设置前缀.MEDIA_URL。所以试试这样:
class Media:
js = ('js/rating.js',)
css = {'screen': ('css/rating.css',),}
如果它不起作用,我建议使用FireBug或类似的东西,并检查浏览器是否能够加载css和javascript。
基于评论: 看来,您根本没有加载表单媒体。尝试添加模板:
{{ my_form.media }}
在{%block subheader%}中(或者在您加载脚本和css的任何地方),其中“my_form”是在视图中创建的表单实例的名称。
答案 2 :(得分:0)
次要优化:您无需在您的路径中添加settings.MEDIA_URL,它会在打印出来时自动完成。