如何解决阻止Django表单插入页面顶部加载的JavaScript
我使用Django(版本2.2.1)构建应用程序。所有模板都扩展了基本模板,该模板按如下方式加载jQuery:
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.min.js' %}"></script>
在一个模板中,django-autocomplete-light(版本3.4.1)的自动完成输入字段和django-bootstrap-datepicker-plus(版本3.0.5)的日期选择器的组合导致日期选择器无法工作,由于引导日期选择器无法初始化jQuery。 事实证明,我偶然发现了与上述in this question相同的问题。
问题在于模板包含一个表单,该表单包含一个ModelSelect2
小部件。该小部件使表单再次加载jQuery,如其media
属性所示:
@property
def media(self):
"""Return JS/CSS resources for the widget."""
extra = '' if settings.DEBUG else '.min'
i18n_name = self._get_language_code()
i18n_file = (
'%s%s.js' % (I18N_PATH,i18n_name),) if i18n_name else ()
return forms.Media(
js=(
'admin/js/vendor/jquery/jquery%s.js' % extra,'autocomplete_light/jquery.init.js','vendor/select2/dist/js/select2.full%s.js' % extra,) + i18n_file + (
'autocomplete_light/autocomplete.init.js','autocomplete_light/forward.js','autocomplete_light/select2.js','autocomplete_light/jquery.post-setup.js',),css={...},# omitted,because irrelevant for this question.
)
我的问题:是否可以防止这种双重加载javascript文件?
我猜想一个表单必须能够呈现自身,而又不知道表单之前呈现了什么。那么,是否有可能以某种方式通知Form
有关模板中已包含的任何javascript,以便Form.media()
可以排除已经在表单外部加载的javascript?
噢,讽刺的是:在回顾这个问题时,我偶然发现了this question,现在我发现在django-autocomplete-light jQuery的较新版本中,已从媒体中删除了jQuery,解决了我的问题...但是,我仍然对这个问题的答案感兴趣,因为使用外部软件包提供的小部件的不同组合可能再次出现该问题。
解决方法
通常这就是为什么有时您会在模板的底部使用{% block js %}
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。