如何在 django admin 中添加脚本类型="module"

How to add script type="module" in django admin

如果我想在我的 Django 管理中使用一些 javascript 功能,我通常会使用 Media class 来实现它:

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):

    class Media:
        js = ('js/my_script.js',)

但是我现在有一个 ES6 模块的脚本,所以我希望 Django 像这样渲染它:

<script src="path/to/static/js/my_script" type="module"></script>

并且使用 Media class 不会呈现 type="module" 属性。

有什么帮助或提示可以实现这一目标吗?谢谢

在您的自定义 change_form.html 模板中,扩展 admin_change_form_document_ready 块并添加事件侦听器代码

{% extends 'admin/change_form.html' %}
{% load static %}

{% block admin_change_form_document_ready %}
{{ block.super }}
<script type="text/javascript" src="{% static 'app/your_file.js' %}"></script>
{% endblock %}

您将无法为此使用 Media class,如果您检查 code,该方法将始终呈现相同的 type="text/javascript"

如果您真的想采用 Media 方式,您可以创建自己的 Mediaclass 并继承 forms.Media,然后您可以尝试使用 Media as a dynamic property 可以用 type="module".

生成脚本

另一种选择是使用之前建议的自定义模板,或者甚至考虑向您的应用添加 templatetag 以便在您的模板中添加 ES6 模块。

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):

    class Media:
        module = ('js/my_script.js',)

你可以只更改 js 来替换模块,它的定义是 src 的类型

对我有用。