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

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

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

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

Python

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

Q&A

解決済

1回答

2292閲覧

djangoのquerysetにおいて、オブジェクトがhtmlへ表示されない

noyu0820

総合スコア1

Django

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

Python

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

0グッド

0クリップ

投稿2020/11/16 13:11

お世話になります。初心者ですので、初歩的なミスをしているものと思われますが、どうしても状況が改善しないので、力をお貸しください。

前提・実現したいこと

djangoベースのWebサイトにおいて、お知らせ欄を設け、mysqlへアップロードしたニュースのタイトルのみをトップページへリストのような形で表示させる。
また、この際、表示されたタイトルをクリックした場合、お知らせの詳細ページへ遷移させる。

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

django管理サイトにて、お知らせのタイトルをmysqlのデータベースへアップロードすることは問題なくできているものの、htmlファイルに表示させることができない。

該当のソースコード

models.py

Python

1from django.db import models 2 3 4class News(models.Model): 5 """""お知らせ欄機能""""" 6 7 title = models.CharField(verbose_name="タイトル", max_length=40, null=True) 8 context = models.TextField(verbose_name="本文", blank=True, null=True) 9 photo = models.ImageField(verbose_name="画像", blank=True, null=True) 10 11 class Meta: 12 verbose_name_plural = 'お知らせ機能' 13 14 def __str__(self): 15 return self.title

views.py

Python

1from django.views import generic 2from .models import News 3 4 5class IndexView(generic.TemplateView): 6 template_name = "hogehoge/index.html" 7 8 9class RegistrationView(generic.TemplateView): 10 template_name = "hogehoge/registration.html" 11 12 13class LoginView(generic.TemplateView): 14 template_name = "hogehoge/login.html" 15 16 17class LogoutView(generic.TemplateView): 18 template_name = "hogehoge/logout.html" 19 20 21class NewsListView(generic.ListView): 22 model = News 23 queryset = News.objects.all() 24

urls.py

Python

1from django.urls import path 2 3from . import views 4 5app_name = 'hogehoge' 6urlpatterns = [ 7 path('', views.IndexView.as_view(), name="index"), 8 path('registration/', views.RegistrationView.as_view(), name="registration"), 9 path('', views.NewsListView.as_view(), name="index"), 10] 11

index.html

html

1{% load static %} 2{% block contents %} 3<div class="news-area"> 4 <h2>お知らせ</h2> 5 {% for news in news_list %} 6 {{ news.title }} 7 {% endfor %} 8</div> 9{% endblock %}

試したこと

ブラウザキャッシュの削除、migrate等を試行しました。

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

PyCharmにて開発をしておりました。
初学者ですので、初歩的な質問にはなってしまいますこと、大変申し訳ありません。ご回答をお待ちしております。

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

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

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

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

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

guest

回答1

0

ベストアンサー

回答の前提

質問文とコードを読む限り、以下の意図であると解釈して回答します。

  • Djangoアプリ上のトップURLの実装をする過程である
  • その際に、お知らせ情報を取得してHTML上に出力したい

回答

現在IndexViewを使ってHTMLをレスポンスしていますが、これは単なるTemplateViewの継承であり、なおかつtemplate_name以外の変更をしていません。
そのため、index.htmlで使用する予定であるnews_listがそもそもテンプレート変数に存在していません。

汎用ビュークラスを用いる際に、新たにテンプレート変数を用意したいのであれば、get_context_dataをオーバーライドして自分で変数を追加する必要があります。

例として(細かい動作確認してません):

python

1 2class IndexView(generic.TemplateView): 3 template_name = "index.html" 4 5 def get_context_data(self, **kwargs): 6 context = super().get_context_data(**kwargs) 7 context['news_list'] = News.objects.all() 8 return context

※細かい話は、一度Djangoのドキュメントを読むことをお勧めします

投稿2020/11/18 14:33

attakei

総合スコア2738

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

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

noyu0820

2020/11/18 14:35

大変分かりやすいご回答をありがとうございます。 無事に解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問