2017-07-10 5 views
0

私はカスタムウィジェットを作成し、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ファイルを読み込まないようにするにはどうすればよいですか?

答えて

1

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 
関連する問題