Dans le code suivant, Comment le modèle details.html
sait que album
lui est passé par views.py
bien que nous ayons jamais revenu ou défini de context_object_name
dans DetailsView
classe views.py
. Veuillez expliquer comment se connectent les différentes choses ici.Vues génériques de Django: Comment DetailView fournit-il automatiquement la variable au template ??
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'),
]
Merci à l'avance !!
Cela signifie que si j'utilisais un autre nom de variable au lieu de 'album' dans' details.html', cela ne fonctionnerait pas et je dois explicitement définir la variable en utilisant context_object_name, n'est-ce pas? – lordzuko
Pouvez-vous également me dire quand 'get_context_name()' est appelé? – lordzuko
@ lordzuko, à votre premier commentaire, oui :) Le nom de la variable est déterminé par le nom de votre modèle. Vous pouvez le définir explicitement, oui. 'get_context_name()' est appelé dans la méthode 'get()' qui est appelée chaque fois que la vue reçoit une requête GET. –