web-dev-qa-db-ja.com

Django Method Not Allowed(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
9
viviwill

コードで見ることができるように、両方のビューに同じURLを使用しているため、URL /をヒットするたびに、おそらくpostメソッドのない最初のview(IndexView)に要求が送られます。 article_addビューのURLを変更します。次のようにします:

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

]

URL {Host_address}/article-add/からビューにアクセスできるようになります

8
ruddra

Urls.pyに小さな間違いがあり、urls.pyを次のように変更します

app_name = 'myapp'

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

メインプロジェクトurls.pyに「myapp」urls.pyが含まれている場合は、htmlのフォームにaction="{% url 'article_add' %}"この方法でも。

3
Cadmus