Django从未得到处理。 HTTP 405错误引发

时间:2015-12-10 12:17:01

标签: python django

我正在尝试处理post表单,但我无法管理。我准备了表单,给出了操作链接,设置了发布的方法,但是当我点击提交按钮时,没有任何反应,即使我的调试选项是True,django也没有显示错误页面。

以下是我的模板文件中的表单代码:

<form method="post" action="{% url 'articles:stepprocess' 0 %}">
                    {% csrf_token %}
                    <p><label for="title">Title:</label>
                        <input name="title" id="title" type="text"/></p>

                    <p>
                        <label for="dif">Difficulty</label>
                        <select name="dif" id="dif">
                            {% if difficulties %}
                                {% for difficulty in difficulties %}
                                    <option value="{{ difficulty.pk }}">{{ difficulty }}</option>
                                {% endfor %}
                            {% endif %}
                        </select>
                    </p>

                    <p><label for="article">Content:</label>
                        <textarea cols="37" rows="11" name="article" id="article"></textarea></p>

                    <p><input name="send" style="margin-left: 150px;" class="formbutton" value="Send"
                              type="submit"/></p>
</form>

我的urls.py文件:

from django.conf.urls import url
from .views import *

urlpatterns = [
    url(r'^$', Index.as_view(), name="index"),
    url(r'^new/(?P<step>[0-9]+)/$', NewArticle.as_view(), name="newarticle_continue"),
    url(r'^new/', NewArticle.as_view(), name="newarticle"),
    url(r'^new/process/(?P<step>[0-9]+)/$', FormManager.as_view(), name='stepprocess')
    #url(r'^show/(?P<article>[0-9]+)/$'),
]

最后,我的views.py文件:

#required imports...

class FormManager(View):

    def post(self, request, *args, **kwargs):
        return HttpResponse(kwargs['step'])

当我点击提交按钮时,它会给我HTTP 405错误。我可以在python控制台中看到这个错误,但在浏览器中没有显示。只是空白的白色屏幕。

这实际上是测试视图是否正常工作。我的最终目的是我想访问帖子变量并重定向页面。但是,HttpResponseRedirect也不起作用。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

HTTP 405错误表示“方法不允许”

在您的情况下,您正在POST ...视图看起来应该接受POST请求。

问题是您的urls.py错误,您发布到的网址被START_PW视图拦截,我猜这只是接受GET。

NewArticle

Django按照定义的顺序查看urlconf 中的网址,并将您的请求发送到匹配的第一个。

上面我修改了订单,或者您只需将from django.conf.urls import url from .views import * urlpatterns = [ url(r'^$', Index.as_view(), name="index"), url(r'^new/process/(?P<step>[0-9]+)/$', FormManager.as_view(), name='stepprocess') url(r'^new/(?P<step>[0-9]+)/$', NewArticle.as_view(), name="newarticle_continue"), url(r'^new/', NewArticle.as_view(), name="newarticle"), #url(r'^show/(?P<article>[0-9]+)/$'), ] 添加到网址末尾:

$

这会阻止它匹配任何url(r'^new/$', NewArticle.as_view(), name="newarticle"), 网址路径。