La vue à usage général vous permet de créer des pages encore plus courtes que les raccourcis. http://docs.djangoproject.jp/en/latest/ref/generic-views.html
J'ai beaucoup écrit dans views.py jusqu'à présent, mais avec une vue générique, vous pouvez le raser.
Modifiez urls.py côté application comme suit.
polls/urls.py ######
from django.conf.urls import patterns, include, url
from django.views.generic import DetailView, ListView
from polls.models import Poll
urlpatterns = patterns('', #N'oubliez pas de le remettre à l'état vide
url(r'^$',
ListView.as_view(
queryset=Poll.objects.order_by('-pub_date')[:5],
context_object_name='latest_poll_list',
template_name='polls/index.html'
)
),
url(r'^(?P<pk>\d+)/$',
DetailView.as_view(
model=Poll,
template_name='polls/detail.html'
)
),
url(r'^(?P<pk>\d+)/results/$',
DetailView.as_view(
model=Poll,
template_name='polls/results.html'
),
name='poll_results'
),
url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
)
Ici, ListView et DetailView sont affichés.
Tout d'abord, en commun, jusqu'à présent, du côté views.py
# def index..
temp = loader.get_template('polls/index.html')
Et
return render_to_response('polls/detail.html',{ #..
Le modèle a été spécifié dans la fonction comme ceci,
# url(..
# SomeView.as_view(..
template_name = 'polls/index.html'
Remplacez par une phrase. Chaque modèle est spécifié directement dans URLconf. Si vous ne le spécifiez pas, "appName / modelName_detail.html" semble être le nom par défaut, mais il n'est pas bon de créer un modèle avec ce nom de fichier. Surtout dans cet exemple, le nom du modèle est embrouillé par les détails et les résultats, donc ce n'est certainement pas bon.
Ensuite, regardons chaque type de vue à usage général.
--queryset: saisissez les données que vous souhaitez afficher dans la liste (tableau).
--context_object_name: spécifiez le nom de l'ensemble de requêtes (s'il n'est pas spécifié, le nom modelName_list est le nom par défaut). Dans les modèles créés jusqu'à présent, le nom reçu était "latest_poll_list", donc je l'ai changé (le résultat est le même même si je modifie le nom du côté du modèle).
DetailView。 #####
Tout d'abord, notez que le premier argument d'url a légèrement changé.
# before
r'^(?P<poll_id>\d+)/$'
# after
r'^(?P<pk>\d+)/$'
Les données avec «\ d +» (un ou plusieurs chiffres) comme pk (PrimaryKey) sont reflétées dans le modèle. Pk voici un cliché. Il semble y avoir une limace, mais je ne suis pas sûr pour le moment.
--model: En l'état, la classe de modèle est spécifiée.
--name: vous avez défini un nom pour la vue. Il semble qu'une URL qui appelle cette vue puisse être générée automatiquement (modèle nommé?).
La modification d'URLconf est maintenant terminée. Et si tu l'as fait jusqu'ici
Vous pouvez l'effacer. Cependant, ne laissons que voter. Et modifiez une seule ligne comme suit.
views.py ######
#def vote..
return HttpResponseRedirect( reverse('poll_results', args=(pobject.id,)) )
Le premier argument de reverse a été changé de "polls.views.results" à "poll_results". C'est le nom de la page de résultats que vous avez définie précédemment, et l'inverse semble générer automatiquement une URL en fonction de la vue d'ici.
Si vous vérifiez l'opération, vous pouvez voir qu'elle fonctionne exactement de la même manière que Dernière fois. C'est évidemment plus facile.
Pour le moment, j'aimerais le revoir avec le livre auquel j'ai fait référence dans le post précédent DJango Memo: Basics of Blog Creation et réessayer en même temps.