、テンプレートdetails.html
は、我々が返されないかviews.py
にDetailsView
クラス内の任意のcontext_object_name
を定義したことがないが、album
はviews.py
によってそれに渡されたことを知っているんどのように。 さまざまなものがここでどのように結びついているか説明してください。Djangoジェネリックビュー:DetailViewは自動的にテンプレートに変数を提供しますか?次のコードで
details.html
{% extends 'music/base.html' %}
{% block title %}AlbumDetails{% endblock %}
{% block body %}
<img src="{{ album.album_logo }}" style="width: 250px;">
<h1>{{ album.album_title }}</h1>
<h3>{{ album.artist }}</h3>
{% for song in album.song_set.all %}
{{ song.song_title }}
{% if song.is_favourite %}
<img src="http://i.imgur.com/b9b13Rd.png" />
{% endif %}
<br>
{% endfor %}
{% endblock %}
views.py
from django.views import generic
from .models import Album
class IndexView(generic.ListView):
template_name = 'music/index.html'
context_object_name = 'album_list'
def get_queryset(self):
return Album.objects.all()
class DetailsView(generic.DetailView):
model = Album
template_name = 'music/details.html'
urls.py
from django.conf.urls import url
from . import views
app_name = 'music'
urlpatterns = [
# /music/
url(r'^$', views.IndexView.as_view(), name='index'),
# /music/album_id/
url(r'^(?P<pk>[0-9]+)/$', views.DetailsView.as_view(), name='details'),
]
事前に感謝します!
これは、 'details.html'に' album'の代わりに他の変数名を使用した場合、動作しないため、context_object_nameを明示的に使用して変数を定義する必要があることを意味します。 – lordzuko
'get_context_name()'がいつ呼び出されるのか教えてください。 – lordzuko
@ lordzuko、あなたの最初のコメントにはい:変数の名前はあなたのモデル名によって決まります。明示的に定義することができます。 'get_context_name()'は、ビューがGETリクエストを受け取るたびに呼び出されるget()メソッドで呼び出されます。 –