如何在 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
方式,您可以创建自己的 Media
class 并继承 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 的类型
对我有用。
如果我想在我的 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
方式,您可以创建自己的 Media
class 并继承 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 的类型
对我有用。