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

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

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

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

Python

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

HTML

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

Q&A

解決済

1回答

800閲覧

CreateViewを継承したクラス内で定義した変数をcreate.htmlで表示したいです。

prairie

総合スコア6

Django

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

Python

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

HTML

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

0グッド

0クリップ

投稿2020/07/27 10:03

編集2020/07/27 10:54

前提・実現したいこと・知りたいこと

CreateView内で定義した変数をcreate.htmlで表示したいです。

プログラミング初心者です。
Djangoで麻雀のスコア表を作成するアプリを作ろうと思っています。
今実現しようと思っていることは、プレイヤーの入力フォームと点数入力のフォームを別で作成し、点数入力の画面で前に入力したプレイヤーの名前を表示させることです。
つまり、モデルが2つあり、そのうちの片方のモデルを作成する用のhtmlファイルにもう片方のモデルの内容を表示したいです。

発生している問題・エラーメッセージ

CreateView内の変数をcreate.htmlで表示する方法が分かりませんでした。
下のソースコードを実行してみると
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'tuple'
というエラーメッセージが出てしまいました。

該当のソースコード

#####models.py
classが2つあります。今は先にMahjongPlayerModelを入力し、後にMahjongRecordModelを入力します。

python

1class MahjongPlayerModel(models.Model): 2 player1 = models.CharField(max_length = 10) 3 player2 = models.CharField(max_length = 10) 4 player3 = models.CharField(max_length = 10) 5 player4 = models.CharField(max_length = 10) 6 7RANK = (('1st','1st'), ('2nd','2nd'), ('3rd','3rd'), ('4th','4th')) 8 9class MahjongRecordModel(models.Model): 10 rank1 = models.CharField( 11 max_length = 50, 12 choices = RANK, 13 default = '1st' 14 ) 15 rank2 = models.CharField( 16 max_length = 50, 17 choices = RANK, 18 default = '2nd' 19 ) 20 rank3 = models.CharField( 21 max_length = 50, 22 choices = RANK, 23 default = '3rd' 24 ) 25 rank4 = models.CharField( 26 max_length = 50, 27 choices = RANK, 28 default = '4th' 29 ) 30 score1 = models.IntegerField(default=25000) 31 score2 = models.IntegerField(default=25000) 32 score3 = models.IntegerField(default=25000) 33 score4 = models.IntegerField(default=25000)

#####urls.py

path('playercreate/', MahjongPlayerCreate.as_view(), name = 'playercreate'), path('create/', MahjongRecordCreate.as_view(), name = 'create'),

#####views.py
2つ目のclassの1.2行目が問題箇所です。

python

1class MahjongPlayerCreate(CreateView): 2 template_name = 'playercreate.html' 3 model = MahjongPlayerModel 4 fields = ('player1', 'player2', 'player3', 'player4') 5 success_url = reverse_lazy('top') 6 7class MahjongRecordCreate(CreateView): 8 players = MahjongPlayerModel.objects.all() 9 template_name = ('create.html', {'players':players}) #このようにしたい。。。 10 model = MahjongRecordModel 11 fields = ( 12 'score1', 'score2', 'score3', 'score4', 13 'rank1', 'rank2', 'rank3', 'rank4') 14 success_url = reverse_lazy('scorecalculate')

#####create.html
このように表示したいです。

html

1{% extends 'base.html' %} 2 3{% block content %} 4<div class = 'container'> 5 <p><a href="{% url 'top' %}" class="btn-lg btn-light" tabindex="-1" role="button" aria-disabled="true">戻る</a></p> 6 <form action = "" method = "POST">{% csrf_token %} 7 <p> 8 {% for item in players %} 9 {{ item.player1 }} 10 {{ form.score1 }} 11 {{ form.rank1 }} 12 </p> 13 <p> 14 {{ item.player2 }} 15 {{ form.score2 }} 16 {{ form.rank2 }} 17 </p> 18 <p> 19 {{ item.player3 }} 20 {{ form.score3 }} 21 {{ form.rank3 }} 22 </p> 23 <p> 24 {{ item.player4 }} 25 {{ form.score4 }} 26 {{ form.rank4 }} 27 </p> 28 {% endfor %} 29 <input type = "submit" value = "保存する"> 30 </form> 31</div> 32{% endblock content %}

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python

1class MahjongRecordCreate(CreateView): 2 players = MahjongPlayerModel.objects.all() 3 template_name = ('create.html') 4 ・・・ 5 def get_context_data(self, **kwargs): 6 context = super().get_context_data(**kwargs) 7 context['players'] = players 8 return context 9```こうですか?

投稿2020/07/27 10:55

ForestSeo

総合スコア2720

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

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

prairie

2020/07/27 11:17

ForestSeoさん、回答ありがとうございます! 回答の通り実行してみたら NameError: name 'players' is not defined というエラーが出てしまいましたが、関数の中に players = MahjongPlayerModel.objects.all() を移し入れることでそれも解決できて、やりたいことが実現できました! とても感謝しています!ありがとうございました。 get_context_dataについてあまり知らなかったので勉強しようと思います!
ForestSeo

2020/07/27 19:24

あっget_context_data関数内でplayer宣言しなくてはいけませんね。 ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問