質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.13%

DjangoでMethod Not Allowed(POST)となってしまう

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 599

daaa

score 5

Djangoで掲示板のようなアプリケーションを作成しているのですが、書き込みたい内容を打ち込んだ後に、書き込んだ内容を表示するページに移動するようにしたのですが、ターミナル側に
Method Not Allowed(POST):/post/
Method Not Allowed: /post/
と出てきてしまいます。
どこを修正すればよいでしょうか?

view.pyのコード
from django.shortcuts import render
from django.views.generic import View
from .form import PostForm
from.models import Keijiban

# Create your views here.
class IndexView(View):
    def get(self,request,*args,**kwargs):
        queryset = Keijiban.objects.all()
        return render(request,'keijiban_app/keijiban_app.html',{'submits':queryset})

index=IndexView.as_view()

class PostView(View):
    def get(self,request,*args,**kwargs):
        return render(request,'keijiban_app/post.html',{'form':PostForm})

    def submit(self,request,*args,**kwargs):
        form=PostForm(request.POST)
        submit=form.save(commit=False)
        submit.save()
        return redirect('index')

post=PostView.as_view()
url.pyのコード

from django.contrib import admin
from django.urls import include,path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('keijiban_app.urls'))
]
アプリケーションフォルダ(keijiban_app)内のurl.py

from django.urls import path
from . import views

app_name='keijiban_app'
urlpatterns=[
    path('',views.index,name='index'),
    path('post/',views.post,name='post'),
    ]
書き込みたい内容を打ち込む画面のテンプレート(post.html)

{% extends 'layout.html' %}

{% block pagetitle %}投稿画面{% endblock %}
{% block title %}投稿画面{% endblock %}
{% block content %}
    <form action="{% url 'keijiban_app:post' %}" method="post" >
        {% csrf_token %}
        {{form.as_p}}
        <button type="submit" class="button">投稿する</button>
    </form>
{% endblock %}
書き込んだ内容を表示する画面のテンプレート(keijiban_app.html)

{% extends 'layout.html' %}
{% block pagettile %}掲示板{% endblock %}
{% block title %}投稿一覧{% endblock %}
{% block content %}
    {% for submit in submits %}
        <div class="submit">
            <p class="title">{{submit.title}}</p>
            <p class="content">{{submit.content}}</p>
        </div>
    {% endfor %}
{% endblock %}


Spyderで書いているのですが、view.pyの22行目に"undefined name 'redirect'"と表示されています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • dameo

    2020/01/24 03:20

    最後の1文しか読んでませんが、
    from django.shortcuts import render

    from django.shortcuts import render, redirect
    にした方がいいです

    キャンセル

  • daaa

    2020/01/24 14:22

    コメントありがとうございます
    追記した結果、Spyderではエラーは消えましたが問題は解決できませんでした…
    おそらく基本的なところでミスしているのだとおもうのですが…

    キャンセル

  • dameo

    2020/01/25 02:08

    ちゃんとチュートリアルをやって見比べてください
    適当に書いたコードでは一生動きません

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる