【问题标题】:Submit button no longer works with django crispy forms提交按钮不再适用于 django 脆表单
【发布时间】:2015-08-02 00:25:12
【问题描述】:

我已将引导程序添加到我的页面并尝试让django crispy forms 工作。实际上,我所做的只是pip install django-crispy-forms,将crispy_forms 添加到INSTALLED_APPS 并在我的模板中将{{ form }} 更改为{% crispy form %}(在将bootstrap 和jquery 添加到我的静态目录之后):

{% load crispy_forms_tags %}

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="." method="post">
{% csrf_token %}
{% crispy form %}
<input type="submit" value="Submit" class="btn btn-success">
</form>

这种形式过去工作得很好。更改后它看起来好多了,但是提交按钮不再做任何事情,因为它被移到了表单之外

看到模板更改影响了文档其余部分的布局,我感到很惊讶。我做错了什么还是这是一个错误?

Django 1.8.1,django-crispy-forms 1.4.0

【问题讨论】:

    标签: django django-templates django-crispy-forms


    【解决方案1】:

    由于您自己在模板中包含表单标签、csrf 令牌和提交按钮,因此您应该使用crispy filter 而不是脆标签。

    <form action="." method="post">
        {% csrf_token %}
        {{ form|crispy }}
        <input type="submit" value="Submit" class="btn btn-success">
    </form>
    

    如果你想使用标签,那么你可以在FormHelper 中定义你的提交按钮。请参阅crispy tag docs 了解更多信息。

    【讨论】:

    • 在这种情况下我不能使用表单助手。我怎样才能做到这一点?
    • @asmox 如果我没记错的话,如果你想使用标签,你需要一个助手。您可以使用过滤器,就像我上面的代码示例一样。
    【解决方案2】:

    要将提交按钮添加到您的表单中,crispy_form 的文档是这样做的:

    import floppyforms.__future__ as forms # you can use django's own ModelForm here
    from crispy_forms.helper import FormHelper
    from django.core.urlresolvers import reverse_lazy
    
    class YourForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(YourForm, self).__init__(*args, **kwargs)
            self.helper = FormHelper()
            self.helper.form_method = 'post' # this line sets your form's method to post
            self.helper.form_action = reverse_lazy('your_post_url') # this line sets the form action
            self.helper.layout = Layout( # the order of the items in this layout is important
                'field1_of_your_model',  # field1 will appear first in HTML
                'field2_of_your_model',  # field2 will appear second in HTML
                # this is how to add the submit button to your form and since it is the last item in this tuple, it will be rendered last in the HTML
                Submit('submit', u'Submit', css_class='btn btn-success'), 
        )
    
        class Meta:
            model = YourModel
    

    然后,在你的模板中,你所要做的就是这个

    {% load crispy_forms_tags %}
    {% crispy form %}
    

    就是这样。无需在模板中编写任何 html。

    我认为crispy_forms 的全部意义在于用Python 定义HTML。这样您就不必在模板中编写太多 HTML。


    一些补充说明:

    由于您使用的是引导程序。在上面定义的__init__() 中还有另外三个对您有帮助的字段,如果需要,请添加:

    self.helper.form_class = 'form-horizontal' # if you want to have a horizontally layout form
    self.helper.label_class = 'col-md-3' # this css class attribute will be added to all of the labels in your form. For instance, the "Username: " label will have 'col-md-3'
    self.helper.field_class = 'col-md-9' # this css class attribute will be added to all of the input fields in your form. For isntance, the input text box for "Username" will have 'col-md-9'
    

    【讨论】:

      【解决方案3】:

      对于那些使用标签卡在这里并希望将一些自定义 html 添加到他们的&lt;form&gt;的其他人...

      您可以将self.helper.form_tag = False 属性添加到您的助手中,它不会将&lt;/form&gt; 附加到您的表单末尾。

      更多文档here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-28
        • 1970-01-01
        • 2020-12-01
        • 2023-04-03
        • 1970-01-01
        • 2013-12-06
        • 2020-04-02
        • 2020-07-11
        相关资源
        最近更新 更多