创建第一个Django app-part3
编写更多的视图
编辑polls/views.py
点击查看代码
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
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)
编辑polls/urls.py
点击查看代码
from os import name
from django.urls import path
from . import views
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"),
]
修改polls/views.py中的index方法
from django.shortcuts import render
from django.http import HttpResponse
from .models import Question
# Create your views here.
def index(request):
lastest_question_list = Question.objects.order_by("-pub_date")[:5]
output = ", ".join([q.question_text for q in lastest_question_list])
return HttpResponse(output)
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)
Template的使用
设置template, 新建文件 polls/templates/polls/index.html
���击查看代码
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="/polls/{{ question.id }}">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available</p>
{% endif %}
修改polls/views.py中的index方法
点击查看代码
from django.shortcuts import render
from django.http import HttpResponse
from .models import Question
from django.template import loader
# Create your views here.
def index(request):
lastest_question_list = Question.objects.order_by("-pub_date")[:5]
template = loader.get_template("polls/index.html")
context = {
"latest_question_list": lastest_question_list
}
return HttpResponse(template.render(context, request))
使用render
点击查看代码
from django.shortcuts import render
from django.http import HttpResponse
from .models import Question
from django.template import loader
# Create your views here.
def index(request):
lastest_question_list = Question.objects.order_by("-pub_date")[:5]
context = {
"latest_question_list": lastest_question_list
}
return render(request, "polls/index.html", context)
404异常, 修改polls/views.py 中的 detail方法
点击查看代码
from django.http.response import Http404
from django.shortcuts import render
from django.http import HttpResponse
from .models import Question
from django.template import loader
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})
detail.html
点击查看代码
{{question}}
404异常代码的简写
点击查看代码
from django.http.response import Http404
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse
from .models import Question
from django.template import loader
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {"question": question})
Template中的tag-url
修改detail.html
点击查看代码
<h1>{{ question.question_text }}</h1>
<url>
{% for choice in question.choice_set.all%}
<li>{{ choice.choice_text }}</li>
{% endfor %}
</url>
修改index.html, 移除hardcode。detail 为那么属性的值
点击查看代码
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available</p>
{% endif %}

浙公网安备 33010602011771号