gpt4 book ai didi

表单中的 Django 媒体 Assets ,如何延迟/异步 JS Assets

转载 作者:行者123 更新时间:2023-12-04 14:06:26 25 4
gpt4 key购买 nike

official docs解释如何为某些小部件自动添加 Assets 。,从他们的例子:

from django import forms

class CalendarWidget(forms.TextInput):
class Media:
css = {
'all': ('pretty.css',)
}
js = ('animations.js', 'actions.js')

它没有描述的是如何使 JS Assets 延迟或异步加载,例如

    <script defer src="https://myserver.com/static/animations.js">/script>

最佳答案

您可以覆盖小部件的 js-renderer:

表单.py

def render_js(cls):
return [
format_html(
'<script defer src="{}"></script>',
cls.absolute_path(path)
) for path in cls._js
]
forms.widgets.Media.render_js = render_js

但是,它将与您应用程序的所有小部件相关。

更新:但是如果您需要为每个 Widget 提供不同的渲染,我可以建议您使用以下技巧(使用“私有(private)”属性来定义格式):

class CalendarWidget(forms.TextInput):
class Media:
css = {
'all': ('pretty.css',)
}
js = ('animations.js', 'actions.js', 'defer')

def render_js(cls):
fmt = '<script src="{}"></script>'
formats = {
'defer': '<script defer src="{}"></script>'
}

for path in cls._js:
if path in formats:
fmt = formats[path]
break

return [
format_html(
fmt,
cls.absolute_path(path)
) for path in cls._js if path not in formats
]
forms.widgets.Media.render_js = render_js

关于表单中的 Django 媒体 Assets ,如何延迟/异步 JS Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68338996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com