Django方法不允许(POST)

时间:2017-02-26 04:42:14

标签: django forms post

观点:

def article_add(request):
    print request.user, " is adding an article"
    if request.method == "POST":
        web_url = request.POST['web_url']
        Uploadarticle(web_url)
        return redirect('myapp:index')

在html中:

<form class="navbar-form navbar-right" role="form" method="post" action="{% url 'myapp:article_add' %}" enctype="multipart/form-data">
{% csrf_token %}
    <div class="form-group">
        <div class="col-sm-10">
        <input id="article_url" name="web_url" type="text">
        </div>
   </div>
   <button type="submit" class="btn btn-default"> + </button>
</form>

在url.py中:

app_name = 'myapp'
urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^$', views.article_add, name='article_add'),
]

我在这里尝试做的是通过html传递url值来查看,调用函数上传数据库,将用户重定向到刷新的同一主页,然后新添加的项目将显示。

每次我提交的时候我都有一个空白页面,在终端我得到了一个错误说:

Method Not Allowed (POST): /
"POST / HTTP/1.1" 405 0

2 个答案:

答案 0 :(得分:7)

正如我在代码中看到的那样,您对两个视图使用相同的URL,因此,每当您点击URL /时,请求将转到第一个视图(IndexView),该视图可能没有任何post方法。更改article_add视图的网址。这样做:

app_name = 'myapp'
urlpatterns = [
    url(r'^article-add/$', views.article_add, name='article_add'),
    url(r'^$', views.IndexView.as_view(), name='index'),

]

您将能够访问来自网址{host_address}/article-add/

的视图

答案 1 :(得分:2)

你的urls.py中有一个小错误,按照以下方式更改你的urls.py

DECLARE
    CURSOR C1 IS 
        SELECT A, B, 100 * b / sum(b) over (partition by A) VAR_PCT FROM TBL;
BEGIN
    FOR REC1 IN C1
    LOOP
        DBMS_OUTPUT.PUT_LINE(REC1.A ||'|'|| REC1.B ||'|'||REC1.VAR_PCT)
    END LOOP;
END;

如果您在主项目urls.py中输入'myapp'urls.py,那么在html中的表单中也只是以这种方式放置app_name = 'myapp' urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'), url(r'^article-add/$', views.article_add, name='article_add'), ]

相关问题