【问题标题】:submit button not working in django提交按钮在 Django 中不起作用
【发布时间】:2015-04-08 06:54:37
【问题描述】:

在我的 django 模板中,当我一次渲染整个表单时,提交按钮有效并且表单被提交或出现错误(如果有):

<form action="" method="POST" >
                {% csrf_token %}
                    <div class="row">
                        <div class="small-12 large-8 columns">
                            {{ form }}
                            <input type="submit" value="submit">
                        </div>
                    </div>
</form>

但是当我这样渲染时:

<form action="" method="POST" >
                {% csrf_token %}
                    <div class="row">
                        <div class="small-6 columns">
                            {{ form.name }}
                            <input type="submit" value="submit">
                        </div>
                        <div class="small-6 columns">
                            {{ form.email}}
                        </div>
                    </div>
                    <div class="row">
                        <div class="small-6 columns">
                            {{ form.model_no}}
                        </div>
                        <div class="small-6 columns">
                            {{ form.phone_no}}
                        </div>
                    </div>
                    <div class="row">
                        <div class="small-12 columns">
                            {{ form.problem_details}}
                        </div>
                    </div>
                <div class="row">
                    <div class="small-12 columns">
                        <input type="submit" value="submit">
                    </div>
                </div>
            </form>

提交时,页面只是重新加载,没有任何事情发生,既没有提交表单,也没有出现错误。

urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin

    urlpatterns = patterns('',
        url(r'^$', 'query_form.views.contactview', name="home"),
        url(r'^thankyou/', 'query_form.views.thankyou', name="thankyou"),
        url(r'^admin/', include(admin.site.urls)),
    )

views.py:http://pastebin.com/TGzkh7aq

我想使用第二种方法进行正确的样式设置。请帮忙。

我得到了应该为表单提供“操作”的答案,但我的问题是为什么第一种方法有效,而第二种方法没有“操作”。

编辑:在使用action="{% url 'thankyou' %}" 时出现以下错误:

NoReverseMatch at / Reverse for 'thankyou' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

更新:我在 urls.py 中缺少逗号,这是导致上述错误的原因。我已经更新了代码。

但是现在我的表单因为action 而被提交,即使它是空的也没有显示任何错误。就像指向thankyou 页面的链接一样。

【问题讨论】:

  • 您可以发布您的urls.py 文件吗?最终,您的表单中缺少action,它在您提交后处理重定向,但是一旦您按下提交按钮就知道您希望表单在哪里结束,这将有助于我形成一个更完整的解决方案。
  • @SuperGroy 我已经更新了问题。
  • @vicodin 您的数据可能有错误,但您看不到它们。查看我对文档链接的回答。
  • 尝试在 urls.py from query_form.views importthankyou 然后 url(r'^thankyou/$',thankyou, name="thankyou"),如果这会在导入时产生错误,那么您的路径错误。
  • @mtnpaul 阅读您的评论后,我意识到了错误并更新了问题。

标签: python django forms django-forms


【解决方案1】:

如果您完全控制 HTML 呈现,那么您应该 output the errors by yourself:

{{ form.name.errors }}

【讨论】:

  • 还有{{ form.non_field_errors }} 在表格的顶部。
  • @DanielRoseman 当然。如链接文档中第一个示例的第一行所示:-)
  • 谢谢,这解决了错误处理的问题,但我的表单仍然没有提交。
【解决方案2】:

使用此模板,您将能够在您的 Django 表单中使用 Twitter Bootstrap

<form class="form-horizontal" action="" method="POST" {% if form.is_multipart %}enctype="multipart/form-data"{% endif %}>
{% csrf_token %}
{{ form.media }}
{% if form.errors %}
    <div class="alert alert-error">
        <ul>
            {% for error in form.non_field_errors %}
                <li>{{ error }}</li>
            {% endfor %}
        </ul>
    </div>
{% endif %}
{% for field in form.visible_fields %}
    <div class="control-group {{ field.html_name }} {% if field.errors %}error{% endif %}">
        <label class="control-label">{{ field.label }}{% if field.field.required %} *{% endif %}</label>
        <div class="controls">
            {{ field }}
            {% if field.errors %}<span class="help-inline">{{ field.errors.as_text }}</span>{% endif %}
        </div>
    </div>
{% endfor %}
{% for field in form.hidden_fields %}
    {{ field }}
{% endfor %}

{% block formsets %}
    {% for formset in inlines %}
        {% include "inline_formset.html" with formset=formset %}
    {% endfor %}        
{% endblock formsets %}

<div class="form-actions">
    <input class="btn btn-primary btn-large" type="submit" value="Submit"/>
    {% block extra_buttons %}
    {% endblock extra_buttons %}
</div>

【讨论】:

  • 我可以使用它,但我想知道为什么提交按钮在第二种情况下不起作用。
【解决方案3】:

首先尝试为您的表单添加一个操作。

【讨论】:

    【解决方案4】:

    您尝试过 action="." 吗?我认为这适用于您的情况。

    【讨论】:

      【解决方案5】:

      您可能没有在表单上添加必填字段,因此无法提交

      【讨论】:

        【解决方案6】:

        所以基本上,我遇到了同样的问题,div 内的type="submit" 似乎是问题所在。可以使用具有相同属性的input标签来解决,至于名称可以使用input标签的value属性。如果您想知道为什么输入标签有效而 div 标签无效,请查看下面的链接

        [https://docs.djangoproject.com/en/3.2/topics/forms/][1]

        【讨论】:

          猜你喜欢
          • 2020-10-08
          • 2020-08-21
          • 1970-01-01
          • 1970-01-01
          • 2013-04-09
          • 1970-01-01
          相关资源
          最近更新 更多