【发布时间】:2017-12-14 20:08:15
【问题描述】:
我创建了一个自定义小部件并包含一个 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。
使用时如何避免加载JS文件{% crispy user_form %}?
【问题讨论】:
标签: javascript jquery django django-forms django-templates