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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2168閲覧

Djangoで掲示板を作成したいのですが投稿を保存する処理でエラーが出てしまいます。

itochan

総合スコア4

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2020/04/18 16:21

前提・実現したいこと

プログラミング初心者です。プログラミングの勉強がてら簡単な掲示板サイトを作成しようと思い下記のサイトを参考にコードを書きました。

Djangoで掲示板アプリを1から作るの(その1)
Djangoで掲示板アプリを1から作るの(その2)
Djangoで掲示板アプリを1から作るの(その3)

投稿画面のフォームを作るところまではできたのですが、投稿ボタンを押した後のデータベースに保存する処理でエラーが起きてしまいました。解決策がございましたらご教授ください。

###エラーメッセージ

NameError at /write/ name 'redirect' is not defined

コード

python

1mysite/posts/views.py 2from django.shortcuts import render 3from django.views.generic import View 4from .form import WriteForm 5 6 7class IndexView(View): 8 def get(self,request, *args, **kwargs): 9 return render(request, 'posts/post.html') 10 11 12index = IndexView.as_view() 13 14 15class WriteView(View): 16 def get(self, request, *args, **kwargs): 17 return render(request, 'posts/write.html', {'form': WriteForm}) 18 19 def post(self, request, *args, **kwargs): 20 form = WriteForm(request.POST) 21 post = form.save(commit=False) 22 post.save() 23 return redirect(to='posts:index') 24 25 26write = WriteView.as_view() 27

python

1mysite/mysite/settings.py 2import os 3BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 4SECRET_KEY = 5 6DEBUG = True 7 8ALLOWED_HOSTS = [] 9 10 11# Application definition 12 13INSTALLED_APPS = [ 14 'django.contrib.admin', 15 'django.contrib.auth', 16 'django.contrib.contenttypes', 17 'django.contrib.sessions', 18 'django.contrib.messages', 19 'django.contrib.staticfiles', 20 'posts', 21 'templates', 22] 23 24MIDDLEWARE = [ 25 'django.middleware.security.SecurityMiddleware', 26 'django.contrib.sessions.middleware.SessionMiddleware', 27 'django.middleware.common.CommonMiddleware', 28 'django.middleware.csrf.CsrfViewMiddleware', 29 'django.contrib.auth.middleware.AuthenticationMiddleware', 30 'django.contrib.messages.middleware.MessageMiddleware', 31 'django.middleware.clickjacking.XFrameOptionsMiddleware', 32] 33 34ROOT_URLCONF = 'config.urls' 35 36TEMPLATES = [ 37 { 38 'BACKEND': 'django.template.backends.django.DjangoTemplates', 39 'DIRS': [os.path.join(BASE_DIR, 'templates')], 40 'APP_DIRS': True, 41 'OPTIONS': { 42 'context_processors': [ 43 'django.template.context_processors.debug', 44 'django.template.context_processors.request', 45 'django.contrib.auth.context_processors.auth', 46 'django.contrib.messages.context_processors.messages', 47 ], 48 }, 49 }, 50] 51 52WSGI_APPLICATION = 'config.wsgi.application' 53 54 55# Database 56# https://docs.djangoproject.com/en/3.0/ref/settings/#databases 57 58DATABASES = { 59 'default': { 60 'ENGINE': 'django.db.backends.sqlite3', 61 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 62 } 63} 64 65 66# Password validation 67# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators 68 69AUTH_PASSWORD_VALIDATORS = [ 70 { 71 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 72 }, 73 { 74 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 75 }, 76 { 77 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 78 }, 79 { 80 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 81 }, 82] 83 84 85# Internationalization 86# https://docs.djangoproject.com/en/3.0/topics/i18n/ 87 88LANGUAGE_CODE = 'en-us' 89 90TIME_ZONE = 'UTC' 91 92USE_I18N = True 93 94USE_L10N = True 95 96USE_TZ = True 97 98 99# Static files (CSS, JavaScript, Images) 100# https://docs.djangoproject.com/en/3.0/howto/static-files/ 101 102STATIC_URL = '/static/' 103STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] 104

python

1mysite/mysite/urls.py 2from django.contrib import admin 3from django.urls import include, path 4 5urlpatterns = [ 6 path('admin/', admin.site.urls), 7 path('', include('posts.urls')), 8]

python

1mysite/posts/urls.py 2from django.urls import path 3from . import views 4 5app_name = 'posts' 6urlpatterns = [ 7 path('', views.index, name='index'), 8 path('write/', views.write, name='write'), 9]

試したこと

googleで調べたのですが初心者の自分には何をしたらいいのかわかりませんでした。

fwやツールのバージョン

fw Windows defender
django3.0.5

DrqYuto👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

redirectが定義されてないんだと思います。

ですので、views.pyの最初の

from django.shortcuts import render
に、redirectを付け加えて

from django.shortcuts import render, redirect
としてみてください。

投稿2020/04/18 19:19

llr114

総合スコア203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itochan

2020/04/19 12:06

ご回答ありがとうございます。 mysite/posts/views.py の from django.shortcuts import render に、redirectを付け加えてみたのですが、NameError at /write/ name 'redirect' is not definedと再びエラーが出てしまいました。
llr114

2020/04/19 12:08

エラーが出てるフォルダはどこでしょうか? エラー文の詳細を頂けますと幸いです。
itochan

2020/04/19 13:25

ご返信ありがとうございます。こういう感じでエラーが出てしまいます。 NameError at /write/ name 'redirect' is not defined Request Method: POST Request URL: http://127.0.0.1:8000/write/ Django Version: 3.0.5 Exception Type: NameError Exception Value: name 'redirect' is not defined Exception Location: C:\Users\daivi\mysite\posts\views.py in post, line 30 Python Executable: C:\Users\daivi\anaconda3\python.exe Python Version: 3.7.6 from django.shortcuts import render, redirect # Create your views here. from django.views.generic import View #form.pyからフォームをインポート from .form import WriteForm class IndexView(View): def get(self,request, *args, **kwargs): return render(request, 'posts/post.html') index = IndexView.as_view() class WriteView(View): def get(self, request, *args, **kwargs): return render(request, 'posts/write.html', {'form': WriteForm}) def post(self, request, *args, **kwargs): # formに書いた内容を格納する form = WriteForm(request.POST) # 保存する前に一旦取り出す post = form.save(commit=False) # 保存 post.save() # indexのviewに移動 return redirect(to='posts:index') write = WriteView.as_view()
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問