run*_*ace 3 django django-forms django-widget
官方文档解释了如何自动为某些小部件添加资产。,从他们的示例:
from django import forms
class CalendarWidget(forms.TextInput):
class Media:
css = {
'all': ('pretty.css',)
}
js = ('animations.js', 'actions.js')
Run Code Online (Sandbox Code Playgroud)
它没有描述的是如何使 JS 资源延迟或异步加载,例如
<script defer src="https://myserver.com/static/animations.js">/script>
Run Code Online (Sandbox Code Playgroud)
如何添加deferorasync属性?
您可以覆盖小部件的 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
Run Code Online (Sandbox Code Playgroud)
但是,它将与您应用程序的所有小部件相关。
UPD: 但是如果您需要每个小部件不同的渲染,我可以建议您使用以下技巧(使用“私有”属性来定义格式):
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |