对于Django的股票(开箱即用) admin,添加自定义JavaScript非常简单:
class ContentAdmin(admin.ModelAdmin):
model = Content
class Media:
js = ('js/content.js',)
在Django 1.8.4(已测试过)中精彩地工作。
现在我在项目中使用django-xadmin来增强用户界面/体验。问题是上面的代码没有将自定义JS添加到xadmin的视图中。
执行项目的自述文件,“文档”(或缺少),甚至深入研究源代码。我得到的最远的是找出覆盖get_media()
方法它实际上将自定义JS添加到视图中,但由于它覆盖父调用,所有其他xadmin的JS和CSS都没有加载。
class ContentAdmin(admin.ModelAdmin):
model = Content
class Media:
js = ('js/content.js',)
def get_media(self):
# Tried "super(ContentAdmin, self).get_media()"
## » Says method doesn't exists
# Tried "super(ContentAdmin, self).media"
## » Exactly the same thing as "self.media" below
media = self.media
print("#### MEDIA IS {}".format(media.__dict__))
return media
打印出来:
#### MEDIA IS {'_ css':{},'_ js':['/ static / admin / js / core.js','/ static / admin / js / admin / RelatedObjectLookups.js', '/static/admin/js/jquery.js','/ static / admin / js / jquery.init.js','/ static / admin / js /actions.js','js / content.js']}
我的自定义JS('js/content.js'
)肯定存在并被加载,但所有其他默认的xadmin的CSS和JS都消失了。
有关如何在不覆盖父级媒体属性的情况下添加自定义JS的任何想法?或者在重写时如何保留它?
答案 0 :(得分:4)
您似乎没有正确使用django-xadmin的管理界面。
使用django-xadmin,您的管理对象不应该继承自django' admin.ModelAdmin
,而只是object
。当您在应用的xadmin.site.register(model,admin_class)
模块中执行adminx.py
时,django-xadmin会根据插件和网址格式动态生成(并缓存)实际的类。
您的adminx.py
应该类似于:
import xadmin
from .models import Content
class ContentAdmin(object):
def get_media(self):
# media is the parent's return value (modified by any plugins)
media = super(ContentAdmin,self).get_media()
media.add_js(('js/content.js',))
return media
xadmin.site.regsiter(Content,ContentAdmin)