[Django] 詳細画面で文字が表示されないときに確認するべき場所と変更部分
こんにちは! haru です!
今回の記事では詳細画面に情報を表示しようとしたのに表示できなくて、ある場所を変更したら表示することができたことについて紹介したいと思います!
※他のファイルの記述の違いによって表示できない可能性もあります
1. 表示できなかった時の views.py, detail.html
views.py(一部抜粋)
from django.views.generic import TemplateView
***略***
class DetailView(DetailView):
template_name = 'movies/detail.html'
model = MovieContent
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
detail = DetailView.as_view()
detail.html(一部抜粋)
{% extends 'base.html' %}
{% block content %}
<h1>{{ object.title }}</h1>
<video witdh='400px' height="200px" src='{{ object.movie.url }}' controls></video>
<p>{{ object.created_at }}</p>
{% endblock %}
このようにしてみましたが表示することができませんでした。
この書き方でも表示できる書き方はありますが、今回は自分のどこかの記入ミス & はっきりと理解してなかったのでこの書き方はやめました。
2. 表示するための変更
(1). views.py の変更
・views.py (変更前、一部抜粋)
from django.views.generic import TemplateView
***略***
class DetailView(DetailView):
template_name = 'movies/detail.html'
model = MovieContent
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
detail = DetailView.as_view()
***略***
このようになっているところを下記のように変更しています。
from django.views.generic import TemplateView
from django.views import generic
***略***
class DetailView(generic.DetailView):
template_name = 'movies/detail.html'
model = Movie
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
detail = DetailView.as_view()
***略***
DetailViewの引数に generic を追加しました。
(2). detail.htmlの変更
下記コードのようにしています。
・home.html(一部抜粋)
{% for movie in movies %}
<div>
<a href='{% url "movies:detail" movie.pk %}'>{{ movie.title }}</a>
<video width='400px' height='auto' src='media/{{ movie.movie }}'></video>
</div>
{% endfor %}
・detail.html(一部抜粋)
{% extends 'base.html' %}
{% block content %}
<h1>{{ object.title }}</h1>
<video witdh='400px' height="200px" src='{{ object.movie.url }}' controls></video>
<p>{{ object.created_at }}</p>
{% endblock %}
・文字系の場合
object.[modelに登録した名前]
・動画の場合
object.[ループで取り出した時に使用した名前].url
({% for movie in movies %} の movie のことです)
のように記述して他のアプリケーションでは表示できました。しかし、今回のアプリケーション開発の時には表示することができませんでした。
そこで下記のようにしてみました。
・home.html
変更なし
・detail.html
{% extends 'base.html' %}
{% block content %}
<h1>{{ movie.title }}</h1>
<video witdh='400px' height="200px" src='{{ movie.movie.url }}' controls></video>
<p>{{ movie.created_at }}</p>
{% endblock %}
・文字系の場合
[モデル名].[モデルに登録した名前]
・動画の場合
[モデル名].[ループで取り出した時に使用した名前].url
このように記述することによって表示することができました!
どこがどのように関係していてその結果表示できたかまでは調べなかったのでもし知りたい方はご自身で調べてください🙏
3.最後に
いかがだったでしょうか?
Djangoに関する知見はこれからも発信していこうと思うのでぜひフォローよろしくお願いします!🙏
この記事が気に入ったらサポートをしてみませんか?