Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何向django xadmin添加自定义javascript?_Python_Django_Django Templates_Django Admin - Fatal编程技术网

Python 如何向django xadmin添加自定义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的视图中 检查了项目的自述文件,“文档”(或缺少文档

对于Django的库存(开箱即用)管理员,添加自定义JavaScript非常简单:

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个)”。