Python 如何向django xadmin添加自定义javascript?
对于Django的库存(开箱即用)管理员,添加自定义JavaScript非常简单:Python 如何向django xadmin添加自定义javascript?,python,django,django-templates,django-admin,Python,Django,Django Templates,Django Admin,对于Django的库存(开箱即用)管理员,添加自定义JavaScript非常简单: class ContentAdmin(admin.ModelAdmin): model = Content class Media: js = ('js/content.js',) 在Django 1.8.4中运行良好(已经测试过) 现在我在我的项目中使用增强的用户界面/体验。问题是上面的代码没有将自定义JS添加到xadmin的视图中 检查了项目的自述文件,“文档”(或缺少文档
class ContentAdmin(admin.ModelAdmin):
model = Content
class Media:
js = ('js/content.js',)
在Django 1.8.4中运行良好(已经测试过)
现在我在我的项目中使用增强的用户界面/体验。问题是上面的代码没有将自定义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
打印出:
####媒体是{{},{},{U 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,有什么想法吗?或者在重写时如何保持它?看起来您没有正确使用django xadmin的管理界面 使用django xadmin,您的管理对象不应该继承django的
admin.ModelAdmin
,而应该继承对象。在应用程序的adminx.py
模块中执行xadmin.site.register(model,admin_class)
时,django xadmin会根据插件和url模式动态生成(并缓存)实际类
您的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)
看起来您没有正确使用django xadmin的管理界面
使用django xadmin,您的管理对象不应该继承django的admin.ModelAdmin
,而应该继承对象。在应用程序的adminx.py
模块中执行xadmin.site.register(model,admin_class)
时,django xadmin会根据插件和url模式动态生成(并缓存)实际类
您的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)
它(xadmin)看起来像一个死了的项目…它确实有很多未解决的问题和PRs,但是所有者仍然存在,并且实际上不时地提交一些更改。它(xadmin)看起来像一个死了的项目…它确实有很多未解决的问题和PRs,但是所有者仍然存在,并且实际上不时地提交一些更改。该死,尝试了类似的方法,但我想我忘记导入xadmin了。刚刚更新了我的代码并进行了测试-您的解决方案非常有效,非常感谢!一个小改动:它是def get_media(self):
,media
参数不存在,否则您会得到“TypeError:get_media()正好接受2个参数(1个给定)”。该死,尝试了类似的方法,但我想我忘了导入xadmin
。刚刚更新了我的代码并进行了测试-您的解决方案非常有效,非常感谢!一个小改动:它是def get_media(self):
,media
参数不存在,否则您会得到“TypeError:get_media()正好接受2个参数(给定1个)”。