不要从django表格打印媒体

时间:2017-07-10 23:20:49

标签: javascript jquery django django-forms django-templates

我创建了一个自定义小部件,其中包含一个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文件?

1 个答案:

答案 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