summaryrefslogtreecommitdiff
path: root/docs/intro/tutorial03.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/intro/tutorial03.txt')
-rw-r--r--docs/intro/tutorial03.txt49
1 files changed, 28 insertions, 21 deletions
diff --git a/docs/intro/tutorial03.txt b/docs/intro/tutorial03.txt
index c0b3b00a51..04bd83ae52 100644
--- a/docs/intro/tutorial03.txt
+++ b/docs/intro/tutorial03.txt
@@ -75,10 +75,12 @@ slightly different, because they take an argument:
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)
+
def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)
+
def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)
@@ -94,13 +96,13 @@ Wire these new views into the ``polls.urls`` module by adding the following
urlpatterns = [
# ex: /polls/
- path('', views.index, name='index'),
+ path("", views.index, name="index"),
# ex: /polls/5/
- path('<int:question_id>/', views.detail, name='detail'),
+ path("<int:question_id>/", views.detail, name="detail"),
# ex: /polls/5/results/
- path('<int:question_id>/results/', views.results, name='results'),
+ path("<int:question_id>/results/", views.results, name="results"),
# ex: /polls/5/vote/
- path('<int:question_id>/vote/', views.vote, name='vote'),
+ path("<int:question_id>/vote/", views.vote, name="vote"),
]
Take a look in your browser, at "/polls/34/". It'll run the ``detail()``
@@ -157,10 +159,11 @@ commas, according to publication date:
def index(request):
- latest_question_list = Question.objects.order_by('-pub_date')[:5]
- output = ', '.join([q.question_text for q in latest_question_list])
+ latest_question_list = Question.objects.order_by("-pub_date")[:5]
+ output = ", ".join([q.question_text for q in latest_question_list])
return HttpResponse(output)
+
# Leave the rest of the views (detail, results, vote) unchanged
There's a problem here, though: the page's design is hard-coded in the view. If
@@ -229,10 +232,10 @@ Now let's update our ``index`` view in ``polls/views.py`` to use the template:
def index(request):
- latest_question_list = Question.objects.order_by('-pub_date')[:5]
- template = loader.get_template('polls/index.html')
+ latest_question_list = Question.objects.order_by("-pub_date")[:5]
+ template = loader.get_template("polls/index.html")
context = {
- 'latest_question_list': latest_question_list,
+ "latest_question_list": latest_question_list,
}
return HttpResponse(template.render(context, request))
@@ -261,9 +264,9 @@ rewritten:
def index(request):
- latest_question_list = Question.objects.order_by('-pub_date')[:5]
- context = {'latest_question_list': latest_question_list}
- return render(request, 'polls/index.html', context)
+ latest_question_list = Question.objects.order_by("-pub_date")[:5]
+ context = {"latest_question_list": latest_question_list}
+ return render(request, "polls/index.html", context)
Note that once we've done this in all these views, we no longer need to import
:mod:`~django.template.loader` and :class:`~django.http.HttpResponse` (you'll
@@ -288,13 +291,15 @@ for a given poll. Here's the view:
from django.shortcuts import render
from .models import Question
+
+
# ...
def detail(request, question_id):
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
raise Http404("Question does not exist")
- return render(request, 'polls/detail.html', {'question': question})
+ return render(request, "polls/detail.html", {"question": question})
The new concept here: The view raises the :exc:`~django.http.Http404` exception
if a question with the requested ID doesn't exist.
@@ -323,10 +328,12 @@ provides a shortcut. Here's the ``detail()`` view, rewritten:
from django.shortcuts import get_object_or_404, render
from .models import Question
+
+
# ...
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
- return render(request, 'polls/detail.html', {'question': question})
+ return render(request, "polls/detail.html", {"question": question})
The :func:`~django.shortcuts.get_object_or_404` function takes a Django model
as its first argument and an arbitrary number of keyword arguments, which it
@@ -408,7 +415,7 @@ defined below::
...
# the 'name' value as called by the {% url %} template tag
- path('<int:question_id>/', views.detail, name='detail'),
+ path("<int:question_id>/", views.detail, name="detail"),
...
If you want to change the URL of the polls detail view to something else,
@@ -417,7 +424,7 @@ template (or templates) you would change it in ``polls/urls.py``::
...
# added the word 'specifics'
- path('specifics/<int:question_id>/', views.detail, name='detail'),
+ path("specifics/<int:question_id>/", views.detail, name="detail"),
...
Namespacing URL names
@@ -440,12 +447,12 @@ file, go ahead and add an ``app_name`` to set the application namespace:
from . import views
- app_name = 'polls'
+ app_name = "polls"
urlpatterns = [
- path('', views.index, name='index'),
- path('<int:question_id>/', views.detail, name='detail'),
- path('<int:question_id>/results/', views.results, name='results'),
- path('<int:question_id>/vote/', views.vote, name='vote'),
+ path("", views.index, name="index"),
+ path("<int:question_id>/", views.detail, name="detail"),
+ path("<int:question_id>/results/", views.results, name="results"),
+ path("<int:question_id>/vote/", views.vote, name="vote"),
]
Now change your ``polls/index.html`` template from: