🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

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

Q&A

2回答

987閲覧

Djangoのhtmlにviews.pyの内容が反映させる方法

takash1

総合スコア0

Django

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

0グッド

0クリップ

投稿2021/03/12 13:06

編集2021/03/12 23:19

前提・実現したいこと

マッサージ院などの"治療院"の内部的な口コミを投稿するwebアプリを作成しています。
openworkの様な社員が会社の評価をするものの治療院verになります。

全ての治療院の一覧を表示するページに
それぞれの治療院への口コミの平均を表示したいと考えています。

発生している問題

それぞれの治療院の口コミの平均を割り出す機能を作成し、表示できるようにしたのですが
他の処理を作成し、一通り動きを確認した際に結果が一切表示されなくなってしまいました。

エラーメッセージなどは確認されず、html内のfor文の内容だけが表示されていない状態です。

該当のソースコード

views.py

views.py

1from django.shortcuts import render,get_object_or_404,redirect 2from django.http import HttpResponse 3from django.template import loader 4from .form import ClinicForm ,ReputationForm 5from .models import Clinic ,Reputation 6from django.views.generic import ListView 7 8import numpy as np 9import matplotlib.pyplot as plt 10 11def all_clinics(request): 12 all_clinics = Clinic.objects.all() 13 all_ave_list = [] 14 cli_rep_list = [] 15# 全ての治療院の平均評価の割り出し 16 for clinic in all_clinics: 17 reputations = Reputation.objects.all().filter(clinic_id=clinic.id) 18 if reputations == "": 19 all_ave_list = all_ave_list + "まだ評価がありません!" 20 else: 21 ave_list = [] 22 condition_list = [] 23 staff_list = [] 24 ven_list = [] 25 respect_list = [] 26 growth_list = [] 27 manage_list = [] 28 eva_list = [] 29 comp_list = [] 30 31 for rep in reputations: 32 condition_list.append(rep.condition) 33 staff_list.append(rep.staff) 34 ven_list.append(rep.ventilation) 35 respect_list.append(rep.respect) 36 growth_list.append(rep.growth) 37 manage_list.append(rep.management) 38 eva_list.append(rep.evaluation) 39 comp_list.append(rep.compliance) 40 41 con_ave = np.average(condition_list) 42 staff_ave = np.average(staff_list) 43 ven_ave = np.average(ven_list) 44 respect_ave = np.average(respect_list) 45 growth_ave = np.average(growth_list) 46 manage_ave = np.average(manage_list) 47 eva_ave = np.average(eva_list) 48 comp_ave = np.average(comp_list) 49 ave_list =[con_ave,staff_ave,ven_ave,respect_ave,growth_ave,manage_ave,eva_ave,comp_ave] 50 average_rep = np.average(ave_list) 51 all_ave_list = all_ave_list + average_rep 52 #ここまで 53 54 for c,r in zip(all_clinics,all_ave_list): 55 cli_rep_list = cli_rep_list + [c.id,c.clinic_name,c.directer_name,c.address,c.phone_num,c.homepage,r] 56 57 58 context = {'cli_rep_list':cli_rep_list} 59 return render(request,'clinic/all_clinics.html',context)

下記for文の内容だけが表示されず、h2のタグ内や、for文後のaタグは表示されています。
all_clinics.html

all_clinics.html

1{% extends "base.html" %} 2 3{% block body %} 4 5<h2 class="mct">すべての治療院</h2> 6{% for c in cli_rep_list %} 7<div class="card mcb text-left mb-3 w-100 rounded"> 8 <div class="card-header"><a class="mct" href="{% url 'detail_clinic' c.0 %}">{{ c.1 }}</a></div> 9 <div class="card-body "> 10 <p class="card-text"> 11 評価:{{ c.6 }}<br> 12 代表者:{{ c.2 }}<br> 13 住所:{{ c.3 }}<br> 14 電話番号:{{ c.4 }}<br> 15 HP:{{ c.5 }}<br> 16 </p> 17 <a class="btn mcb mct" href="{% url 'detail_clinic' c.0 %}">詳しくみてみる</a> 18 </div> 19</div> 20{% endfor %} 21<div class="text-center"> 22<a class="btn btn-info text-light" href="{% url 'new_clinic' %}">新しく治療院を登録する</a> 23</div> 24{% endblock %}

試したこと

処理が間違っていると思い、下記のindexと同じ内容で表示されるか確認。

def index(request): all_clinics = Clinic.objects.all().order_by('id')[:5] context = {'all_clinics':all_clinics} return render(request,'clinic/index.html',context)

def index → def all_clinics
index.html → all_clinics.html
上記に変更しても表示されませんでした。

該当のfor文内の処理を

for i in [1,2,3,4,5]: print(i)

のような簡素なものにするも表示されませんでした。

###解決したいこと
今回投稿した内容について知りたいことは
for文内の処理が一切表示されない理由はどこにあるのか?
というところです。

all_clinics内の処理が違えば整えられると思うのですが
for文内だけ表示されないのがどうにもつかめないところです。

元々、indexの処理と同じ内容だったのを上記処理に変更し
問題なく表示できていたのですが、、、
原因がつかめなく困っております。

補足情報(FW/ツールのバージョンなど)

Django = 3.0.4
Python = 3.8.2

今回、初めての投稿になります。
不足している情報、意味がわかりづらいなどありましたら
遠慮なく仰っていただけると幸いです。

よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

初学者の意見です。的外れだったら申し訳ないです。

・自分も同じくテンプレートタグが思っていたとおり動作しない状況になったことがありますが、その時はChromeの付属機能であるデベロッパーツールを利用して症状を確認しました。そこでのhtmlの表示はどうなっていますか?
・コンテキストの中身はきちんと想定通りのものになっていますか?return render直前に中身をprintで表示した場合、その表示はどうなりますか?

投稿2021/03/13 01:08

kensoon

総合スコア48

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

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

takash1

2021/03/13 01:27

kensoonさん ご回答ありがとうございます。 ・ディベロッパーツール使用 →該当箇所のfor文が空白になっております。 ・contextの中身 →printで中身の確認をしていなかったので試してみます。 アドバイスありがとうございます!
guest

0

python

1for i in list [1,2,3,4,5]: 2 print(i)

このコードの結果は何を期待しているのでしょう?
以下のコードとは違う結果ですか?あるいはsliceとかの指定でしょうか?

python

1for i in [1,2,3,4,5]: 2 print(i)

投稿2021/03/12 14:31

t_obara

総合スコア5488

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

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

takash1

2021/03/12 23:23

t_obaraさん ご返信ありがとうございます。 余計な文字を入れてしまい失礼致しました。 t_obaraさんに記載していただいたようなコードを書いたにも関わらず やはりhtml上にfor文の内容だけが表示されない状態になっております。
takash1

2021/03/13 01:23

もう一度試して見ましたら、無事に表示されました。 処理が間違えている可能性が高いので自分自身で探ってみます ご回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問