我正在尝试处理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
也不起作用。我该如何解决这个问题?
答案 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"),
网址路径。