如何在 Django 管理主页中加载自定义 JS 文件?

Posted

技术标签:

【中文标题】如何在 Django 管理主页中加载自定义 JS 文件?【英文标题】:How to load a custom JS file in Django admin home? 【发布时间】:2013-11-23 11:55:03 【问题描述】:

我有一个高度自定义的 Django 管理员,可以非常简单地为我的每个 ModelAdmin 加载自定义 JS 文件:

class MyModelAdmin(admin.ModelAdmin):
    class Media:
        js = ('js/admin/mymodel.js',)

但是我该如何为管理“主页”执行此操作,其中列出了我的所有管理模型?

更新#1:修正我的问题,因为如果我不能有效地包含 Django 的 jQuery,下面的解决方案就没有那么有用了。那么,如何在 JS 文件中包含 Django 的 jQuery 呢?如果我用(就像我在其他 ModelAdmin JS 文件中所做的那样)包装我的代码:

(function ($) 
    // my code here...
)(django.jQuery);

我收到以下错误:

ReferenceError: django 未定义。

谢谢。

更新 #2:我能够通过以下答案成功包含 Django 的 jQuery:https://***.com/a/10584539/585783

【问题讨论】:

【参考方案1】:

您可以覆盖templates/admin/index.html 并在块extrahead 中添加javascript

% extends "admin/index.html" %

% block extrahead %
     block.super 
    # add a <script> tag here with your JavaScript
% endblock %

【讨论】:

这行得通,看起来很干净,谢谢... 但是,如何在 JS 文件中包含 jQuery?如果我用 (function ($) ... )(django.jQuery); 包装我的代码,就像在我的其他 ModelAdmin JS 文件中一样,我会收到“ReferenceError: django is not defined” jQuery 已预先捆绑在 Django 管理员中 - 您无需手动添加。 上述解决方案将覆盖extrahead块中包含的所有代码,这可能是“ReferenceError: django is not defined”错误的原因。如果在% block extrahead % ... % endblock % 内添加 block.super ,现有代码将被保留。 @tobltobs 我更新了答案。现在看起来正确吗? 它不起作用。将模板添加到 templates/admin/index.html 不会改变任何内容。

以上是关于如何在 Django 管理主页中加载自定义 JS 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从文件中加载自定义 Django 标签?

Django:在使用模板继承时在基本模板文件中加载自定义过滤器时出现问题

如何在反应中加载自定义脚本?

如何从资源中加载自定义字体? [C#]

如何在 tensorflow 服务 (gpu) 中加载自定义动态库 (*.so)?

如何在Spring容器中加载自定义的配置文件