我创建了一个自定义小部件,其中包含一个Media
类。
class MyWidget(forms.MultiWidget):
class Media:
css = {
'all': ('path-to-css.css',),
}
js = (
'path-to-js.js',
)
def __init__(self, visible_input_attrs=None, hidden_input_attrs=None):
widgets = (
TextInput(attrs=visible_input_attrs),
HiddenInput(attrs=hidden_input_attrs),
)
super(MyWidget, self).__init__(widgets)
def decompress(self, value):
if value:
return ['', value]
return [None, None]
在我的表单中,我使用此小部件如下
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = [
'first_name',
'last_name',
'email',
'phone_number',
]
widgets = {
'phone_number': MyWidget(),
}
我的模板文件
{% extends "base.html" %}
{% load static i18n crispy_forms_tags %}
{% block content %}
<div class="row">
<div class="col-sm-12">
<form id="my-form" action="" method="post" enctype="multipart/form-data">
<h2>Contact details</h2>
{% crispy user_form %}
</form>
</div>
</div>
{% endblock content %}
{% block javascript %}
{{ block.super }}
{{ user_form.media.js }}
{% endblock %}
在我的模板文件中,我将表单包含{% crispy user_form %}
(使用清脆表单)。 Django特此自动在表单的开头添加CSS和JS文件。由于我在每个HTML页面的最后加载JS文件,并且因为包含的path-to-js.js
文件需要jQuery,我将{{ user_form.media.js }}
附加到我的模板中的javascript块。因此,path-to-js.js
在我的网页上不止一次出现并导致错误消息,因为第一次加载path-to-js.js
时,jQuery尚未加载。
如何在使用 {% crispy user_form %}
时避免加载JS文件?
答案 0 :(得分:2)
在helper课程中设置include_media = False
。
class UserForm(forms.ModelForm):
...
def __init__(self, *args, **kwargs):
super(UserForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.include_media = False