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

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

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

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

Webサイト

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

HTML

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

Q&A

解決済

1回答

2907閲覧

Djangoーformに記入した値(文字列)を引き継ぐ方法

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

Webサイト

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

HTML

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

0グッド

0クリップ

投稿2020/05/14 03:30

編集2020/05/15 01:23

環境
・Python3.7
・Django3.0
・MacOS

Djangoは初学者で、勉強しながらWebアプリ開発をしています。
あるformに打ち込んだ値(文字列)をページを移動した先のform内に表示させることはできるのでしょうか??
※下の【画像1】で記入したもの(カレーなど)を【画像2】の記入欄に自動で挿入されるようにしたいですm(_ _)m
色々調べているのですが方法が見つからず、、
どなたかご教授よろしくお願いいたします。。

【画像1】(food.html)
イメージ説明

【画像2】(like.html)
イメージ説明

アプリ名 samples
以下、全コードです。

#samples/forms.py from django import forms class FoodForm(forms.Form): food = forms.CharField( label = '記入', max_length=50, ) class LikeForm(forms.Form): like_food = forms.CharField( label = '好きな食べ物', max_length=50) like_spot = forms.CharField( label = '好きな場所', max_length=50) like_season = forms.CharField( label = '好きな季節', max_length=50)
samples/views.py from django.urls import reverse_lazy from django.views import generic from django.views.generic.edit import FormView from .forms import FoodForm, LikeForm class FoodView(generic.FormView): template_name = 'samples/food.html' form_class = FoodForm success_url = reverse_lazy('samples:like') def form_valid(self, form): return super().form_valid(form) class LikeView(FormView): template_name = 'samples/like.html' form_class = LikeForm success_url = reverse_lazy('samples:next') def form_valid(self, form): return super().form_valid(form)
#samples/urls.py from django.urls import path from . import views app_name = 'samples' urlpatterns = [ path('', views.FoodView.as_view(), name='food'), path('like/', views.LikeView.as_view(), name='like'), ]
#samples/templates/samples/food.html <html> <h3>あなたの好きな食べ物はなんですか?</h3> <form action="" method='POST'> {{ form }} {% csrf_token %} <a href="{% url 'samples:like' %}">次へ</a> </form> </html>
#samples/templates/samples/like.html <html> <h1>好きなもの</h1> <form action="" method='POST'> {{ form }} {% csrf_token %} <input type="submit" value="送信"> </form> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

例えば

Python

1# urls.py 2path('like/<str:food>/', views.LikeView.as_view(), name='like'), 3```urlで、記入した好きな食べ物の名前を渡し、 4```Python 5# views.py 6class FoodView(generic.FormView): 7 template_name = 'samples/food.html' 8 form_class = FoodForm 9 def form_valid(self, form): 10 return super().form_valid(form) 11 12 def post(self, request): 13 return redirect(reverse_lazy('like', kwags={'food':request.POST['food']})) 14 15class LikeView(FormView): 16 template_name = 'samples/like.html' 17 form_class = LikeForm 18 success_url = reverse_lazy('samples:next') 19 20 def get_initial(self): 21 initial = super().get_initial() 22 initial['like_food'] = self.kwargs.get('food') 23 return initial 24 25 def form_valid(self, form): 26 return super().form_valid(form)

初期値に入れる

投稿2020/05/14 03:49

編集2020/05/14 20:49
ForestSeo

総合スコア2720

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

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

退会済みユーザー

退会済みユーザー

2020/05/14 04:38

ご回答ありがとうございますm(_ _)m 頂いたコードを試したところ、ターミナルで NameError: name 'pk' is not defined が起きました。。 kwargs={'pk':pk} というのはどういう意味なのでしょうか??
ForestSeo

2020/05/14 04:57

すみませんコピペミスです。 今から編集します
退会済みユーザー

退会済みユーザー

2020/05/14 05:30

ご丁寧にありがとうございます! initial['like_food'] = self.kwargs['food'] のところで、 Exception Value: 'food' というエラーが発生するのですが。。 foodページとlikeページの間にもう一つページがあるのですが、それが原因でしょうかm(_ _)m?
ForestSeo

2020/05/14 09:58

self.kwargs.get('food') こうでした
退会済みユーザー

退会済みユーザー

2020/05/14 11:11

何度もありがとうございますm(_ _)m kwargsは通すことが出来ました! ただ次は、 return redirect('/like/' + request.POST["food"]) のところでMultiValueDictKeyError というものに引っかかってしまいました。。
ForestSeo

2020/05/14 20:50

これでいけませんか? ちょっとlikeとfoodとlike_foodがこんがらがってきました
退会済みユーザー

退会済みユーザー

2020/05/15 01:25

ややこしくてすみませんm(_ _)m 修正していただいたコードで通りました! ありがとうございます! ちなみにLikeFormクラスが上記修正したように項目が複数ある場合には、LikeViewクラスで項目を指定した場所にinitialを引っ張ってこれますか?
ForestSeo

2020/05/15 01:34

はい多分できると思います。 initialはforms.pyで指定したフォームの名前で指定します。 例えば initial['like_spot'] = '日本' とかしたら、like_spotの初期表示に'日本'が入ります
退会済みユーザー

退会済みユーザー

2020/05/15 03:20

なるほど! では上記の例でいくと、例えば仮に def get_initial(self): initial = super().get_initial() #initial['like_food'] = self.kwargs.get('food') initial['like_spot'] = self.kwargs.get('food') return initial とすれば、like_spotの記入欄にfoodで記入したものが反映されるということですかね??
ForestSeo

2020/05/15 03:59 編集

そうですね。反映されます。 でも、URLで渡す値が多くなったら(例えば3つ4つ渡すことになったら)、データベースに保存するしかないですね 例えば年齢と名前を入力する欄があって、OKを押すと [名前]さん[年齢]才ですね! と表示されるようにするには、入力された名前と年齢をデータベースに保存して、idをURLパラメータに渡して、そのidのテーブルの名前と年齢を表示するみたいなことをします。 あと僕的にははクラスviewではなく関数をお勧めします。(見やすくてわかりやすく簡潔に書ける)
退会済みユーザー

退会済みユーザー

2020/05/15 06:44

前回に続き今回も色々とご丁寧にありがとうございますm(_ _)m >あと僕的にははクラスviewではなく関数をお勧めします。(見やすくてわかりやすく簡潔に書ける) ここらへんの概念などもまだ難しくて把握しきれていません(汗
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問