【问题标题】:Do not print media from django form不要从 django 表单打印媒体
【发布时间】: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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 2013-04-15
      • 2013-06-11
      • 2013-09-08
      • 2013-06-22
      • 2013-05-07
      • 2015-01-01
      • 2013-12-16
      • 2014-07-08
      相关资源
      最近更新 更多