it-swarm.com.de

Django-Methode nicht erlaubt (POST)

In Ansichten:

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')

In 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>

In url.py:

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

Was ich hier zu tun versuche, ist, den URL-Wert durch HTML zu übergeben, um anzuzeigen, die Funktion aufzurufen, um die Datenbank hochzuladen, den Benutzer auf dieselbe Homepage umzuleiten, und dann das neu hinzugefügte Element anzuzeigen. 

Irgendwie bekam ich jedes Mal eine leere Seite. Im Terminal wurde eine Fehlermeldung angezeigt: 

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

Wie ich im Code sehen kann, verwenden Sie dieselbe URL für beide Ansichten. Wenn Sie also auf URL / klicken, wird die Anforderung an die erste Ansicht (IndexView) weitergeleitet, die wahrscheinlich keine Post-Methode hat. Ändern Sie die URL für die article_add-Ansicht. Mach das so:

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

]

Sie können über die URL {Host_address}/article-add/ auf die Ansicht zugreifen.

7
ruddra

Es gibt einen kleinen Fehler in Ihrer urls.py. Ändern Sie Ihre urls.py auf folgende Weise

app_name = 'myapp'

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

wenn Sie die 'myapp' urls.py im Hauptprojekt urls.py enthalten, dann setzen Sie in der HTML-Datei einfach action="{% url 'article_add' %}" auf diese Weise.

2
Cadmus