ビューで:
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
コードで見ることができるように、両方のビューに同じ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/
からビューにアクセスできるようになります
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' %}"
この方法でも。