In der Allzweckansicht können Sie Seiten erstellen, die noch kürzer als Verknüpfungen sind. http://docs.djangoproject.jp/en/latest/ref/generic-views.html
Ich habe bisher viel in views.py geschrieben, aber mit einer generischen Ansicht können Sie es abschneiden.
Bearbeiten Sie urls.py auf der Anwendungsseite wie folgt.
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('', #Vergessen Sie nicht, den leeren Zustand wiederherzustellen
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'),
)
Hier werden ListView und DetailView angezeigt.
Zunächst einmal gemeinsam, bis jetzt auf der views.py-Seite
# def index..
temp = loader.get_template('polls/index.html')
Und
return render_to_response('polls/detail.html',{ #..
Die Vorlage wurde in der Funktion wie folgt angegeben:
# url(..
# SomeView.as_view(..
template_name = 'polls/index.html'
Durch einen Satz ersetzen. Jede Vorlage wird direkt in URLconf angegeben. Wenn Sie dies nicht angeben, scheint "appName / modelName_detail.html" der Standardname zu sein, es ist jedoch nicht sinnvoll, eine Vorlage mit diesem Dateinamen zu erstellen. Insbesondere in diesem Beispiel wird der Vorlagenname durch Details und Ergebnisse beschlagen, sodass er definitiv nicht gut ist.
Schauen wir uns als nächstes jede Art von Allzweckansicht an.
--queryset: Geben Sie die Daten ein, die Sie in der Liste (Array) anzeigen möchten.
--context_object_name: Geben Sie den Namen des Abfragesatzes an (falls nicht angegeben, ist der Name modelName_list der Standard). In den bisher erstellten Vorlagen lautete der empfangene Name "latest_poll_list", daher habe ich ihn geändert (das Ergebnis ist das gleiche, auch wenn ich den Namen auf der Vorlagenseite bearbeite).
DetailView。 #####
Beachten Sie zunächst, dass sich das erste Argument der URL geringfügig geändert hat.
# before
r'^(?P<poll_id>\d+)/$'
# after
r'^(?P<pk>\d+)/$'
Die Daten mit "\ d +" (eine oder mehrere Ziffern) als pk (PrimaryKey) werden in der Vorlage wiedergegeben. Pk hier ist ein Klischee. Es scheint eine Schnecke zu geben, aber ich bin mir im Moment nicht sicher.
--model: So wie es ist, wird die Modellklasse angegeben.
--name: Sie haben einen Namen für die Ansicht festgelegt. Es scheint, dass eine URL, die diese Ansicht aufruft, automatisch generiert werden kann (benanntes Muster?).
Die Bearbeitung der URLconf ist nun abgeschlossen. Und wenn Sie es bisher getan haben
Es ist in Ordnung, es zu löschen. Lassen wir jedoch nur die Abstimmung. Und bearbeiten Sie nur eine Zeile wie folgt.
views.py ######
#def vote..
return HttpResponseRedirect( reverse('poll_results', args=(pobject.id,)) )
Das erste Argument der Umkehrung wurde von "polls.views.results" in "poll_results" geändert. Dies ist der Name der Ergebnisseite, die Sie zuvor festgelegt haben, und umgekehrt scheint automatisch eine URL gemäß der Ansicht von hier zu generieren.
Wenn Sie den Vorgang überprüfen, können Sie feststellen, dass er genauso funktioniert wie Letztes Mal. Das ist natürlich einfacher.
Vorerst möchte ich es mit dem Buch überprüfen, auf das ich im letzten Beitrag DJango Memo: Grundlagen der Blog-Erstellung verwiesen habe, und es gleichzeitig erneut versuchen.
Recommended Posts