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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

947閲覧

Djangoでformをテンプレートで表示したい。。

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/05/02 01:17

編集2020/05/02 07:57

Djangoは初学者で、勉強しながらWebアプリ開発をしています。
旅行サイトの検索条件を打ち込むようなページを作っているのですが、formを作成し、テンプレートに反映させようとしたところ、下の画像のように上手くテンプレートにformを引っ張ってこれません。
コードに間違いはないとは思うのですが、、試行錯誤しながら修正してますが改善ならず。。
間違っている箇所があればご指摘いただけると幸いです。
どなたかご教授よろしくお願いいたしますm(_ _)m

現在の出力ページ

各コードは以下です↓

django

1#travel/travel_app/forms.py 2 ※PEOPLE,GENDERはクラス作成前に変数定義しています。 3 4from django import forms 5 6class ConditionForm(forms.Form): 7 #start = '固定' 8 9 goal = forms.CharField(label='目的地', 10 max_length=30, required=True,) 11 12 people = forms.ChoiceField(label='人数', choices=PEOPLE, 13 widget=forms.Select, 14 required=True, 15 help_text='※必須',) 16 17 age = forms.CharField(label='年齢',required=True, 18 help_text ='※必須',) 19 20 gender = forms.ChoiceField(label='性別',choices=GENDER, 21 widget=forms.Select, required=True, 22 help_text ='※必須',) 23 24 def clean_people(): 25 cleaned_data = super().clean_people() 26 people = cleaned_data.get('people') 27 if not people: 28 raise forms.ValidationError('入力してください。') 29 return cleaned_data 30 31 def clean_age(): 32 cleaned_data = super().clean_age() 33 age = cleaned_data.get('age') 34 if not age: 35 raise forms.ValidationError('入力してください。') 36 return cleaned_data 37 38 def clean_gender(): 39 cleaned_data = super().clean_gender() 40 gender = cleaned_data.get('gender') 41 if not gender: 42 raise forms.ValidationError('入力してください。') 43 return cleaned_data

Django

1#travel/travel_app/views.py 2 3from django.shortcuts import render, redirect 4from django.http.response import HttpResponse 5from . import forms 6from django.template.response import TemplateResponse 7from .forms import ConditionForm 8 9def index(request): 10 return TemplateResponse(request, 'travel/condition.html', 11 {'index': index},) 12 13def condition_form(request): 14 form = ConditionForm(request.POST) 15 if request.method == 'POST': 16 if form.is_valid(): 17 form.save() 18 19 context = {'form' : form} 20 return render(request, 'travel/condition.html', context)

Django

1#travel_app/templates/travel/condition.html 2 3<!DOCTYPE html> 4<html> 5<head> 6 <title> 7 {{ index }}<br> 8 </title> 9</head> 10<body> 11 <form action='/form/' method='POST'> 12 {% csrf_token %} 13 {{ form.as_p }}<br> 14 <input type="submit" value="送信"> 15 </form> 16</body> 17</html>

Django

1#travel/urls.py 2 3from django.contrib import admin 4from django.urls import path, include 5from django.conf.urls import url 6 7urlpatterns = [ 8 path('admin/', admin.site.urls), 9 path('travel_app/', include('travel_app.urls')),]

Django

1#travel_app/urls.py 2 3from django.urls import path 4from . import views 5 6urlpatterns = [ 7 path('', views.index, name='index'), 8 path('condition_form/', views.condition_form, name='form'),]

runserver実行後のターミナル画面
イメージ説明

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

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

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

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

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

hasami

2020/05/02 04:28 編集

index関数とcondition_form関数が同じテンプレートを使用してますが、想定通りなのでしょうか? index関数では、コンテキストでフォームを渡していませんので、フォームはレンダリングされません。 urls.pyを提示していただき、どのURLにアクセスしたときに、回答のように表示されるのか、回答に追記していただけないでしょうか?
退会済みユーザー

退会済みユーザー

2020/05/02 06:04

コメントありがとうございます! >index関数とcondition_form関数が同じテンプレートを使用してますが、想定通りなのでしょうか? なにぶん、django初学者なので、まずはひとつのテンプレートに表示を、、と思い同じテンプレートを使用しています。。 urls.pyを追記いたしました!
hasami

2020/05/02 06:50

Djangoを利用しているのでDjangoの流儀で実装しないと苦行ですよ。 また、Djangoの流儀に従っていないと、何を実現したくて、何ができないのかを明確に知ることができなくなり、回答が得られなくなります。
退会済みユーザー

退会済みユーザー

2020/05/02 06:52

なるほど、、 ではindex関数は一旦ないものとして、condition_formはどう修正していけばいいでしょうか?
hasami

2020/05/02 07:05

travel_app/templates/travel_app/urls.py ではなく、 travel_app/urls.py ですよね。 あと、どのURLにアクセスしたときに回答のように表示されたかを提示してください。 travel_app/condition_form/ でしょうか?
退会済みユーザー

退会済みユーザー

2020/05/02 07:10

失礼いたしました。。 >あと、どのURLにアクセスしたときに回答のように表示されたかを提示してください。 travel_app/condition_form/でしょうか? はい、その通りです!
guest

回答1

0

まず、getリクエストを考慮して、以下のようにするとどうなりますか?

python

1def condition_form(request): 2 if request.method == 'POST': 3 form = ConditionForm(request.POST) 4 if form.is_valid(): 5 form.save() 6 # どこかにリダイレクトする? 7 else: 8 form = ConditionForm() 9 context = {'form' : form} 10 return render(request, 'travel/condition.html', context)

投稿2020/05/02 07:16

hasami

総合スコア1277

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

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

退会済みユーザー

退会済みユーザー

2020/05/02 07:22

ありがとうございます! 上記のように修正しましたが、ページの表示は依然変わりません。。
hasami

2020/05/02 07:31

基本的に間違っている箇所はないと思われます。 テンプレートに{{ form.goal }}を追加するとどうなりますか? テンプレートのエンコードの問題?
退会済みユーザー

退会済みユーザー

2020/05/02 07:41

>テンプレートに{{ form.goal }}を追加するとどうなりますか? ページの{{ form.as_p }}という表示が{{ form.goal }}に変わりました。。 >テンプレートのエンコードの問題? と、言いますと?
hasami

2020/05/02 07:49

Djangoがutf-8を想定しているのに、cp932だったりとか・・・。 ちょっとわかりません。runserverを実行しているターミナルになにか出力されていませんか? 直接ブラウザでtravel_app/templates/travel/condition.htmlを表示しているとしか思えないのですが・・・。
退会済みユーザー

退会済みユーザー

2020/05/02 07:56 編集

>runserverを実行しているターミナルになにか出力されていませんか? runserverを実行したあとの画面を追加しました! >直接ブラウザでtravel_app/templates/travel/condition.htmlを表示しているとしか思えないのですが・・・。 そうですよね...
hasami

2020/05/02 08:37

ターミナルに出ているように python manage.py migrate したらどうなりますか?
退会済みユーザー

退会済みユーザー

2020/05/02 11:28

migrate後にrunserverし直しましたがダメでした。。 ターミナルも立ち上げ直し、リトライしましたが改善ならず... こういう場合はプロジェクトから作り直した方がいいのでしょうかm(_ _)m?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問