私はカスタムウィジェットを作成し、Media
クラスを含んでいます。私のテンプレートファイルでdjango形式のメディアを印刷しない
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 %}
を次のように
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]
は私のフォームでは私が{% crispy user_form %}
(クリスピーフォームを使用して)でフォームを含め、このウィジェットを使用します。 Djangoは自動的にCSSとJSファイルをフォームの先頭に追加します。私はすべてのHTMLページの最後にJSファイルをロードし、含まれているpath-to-js.js
ファイルにはjQueryが必要なので、テンプレート内のjavascriptブロックに{{ user_form.media.js }}
を追加します。その結果、最初にpath-to-js.js
がロードされ、jQueryがまだロードされていないため、path-to-js.js
がマイページに複数回表示され、エラーメッセージが表示されます。
{% crispy user_form %}
を使用すると、JSファイルを読み込まないようにするにはどうすればよいですか?