django教程三

本文详细介绍了在Django中创建视图的过程,包括问题列表、详情、结果和投票动作四个视图的实现。通过编辑views.py和urls.py文件,设置URL命名空间,实现了视图的功能。同时,通过创建模板文件index.html和detail.html,展示了如何展示问题列表和详细信息。当查询不存在的问题ID时,视图会返回404错误。
摘要由CSDN通过智能技术生成

本文将集中讲解创建视图(views)。

我们的投票应用包含4个视图:

问题列表页 —— 显示最近的问题;
问题详情页 —— 显示问题文本,带有投票表单;
问题结果页 —— 显示某个问题的结果;
投票动作 —— 处理用户选择某个问题的某个选项。
增加视图
编辑polls/views.py文件如下:

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 django.urls import path
 
from . import views
 
app_name = 'polls'
urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
    # ex: /polls/5/
    path('<int:question_id>/', views.detail, name='detail'),
    # ex: /polls/5/results/
    path('<int:question_id>/results/', views.results, name='results'),
    # ex: /polls/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

app_name = 'polls’这一行是指定URL name的名字空间,防止URL name和其它app中的冲突。

在浏览器中访问“/polls/34/”、“/polls/34/results/”、“/polls/34/vote/”时,将分别显示刚刚增加的detail、results、vote视图。

完善视图
在polls目录下创建templates目录,再在templates中创建一个polls目录,最后在polls中创建一个index.html文件,即模板应该在polls/templates/polls/index.html,这样Django才能简单的使用polls/index.html来引用该模板。

编辑index.html如下:

{% 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 %}

编辑polls/views.py如下:

from django.shortcuts import render
 
from .models import Question
 
 
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)

使用浏览器访问“/polls/”,可以看到一个问题列表页面,显示最近的5个问题。

生成404错误
编辑polls/views.py如下:

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})

如果查询某个ID的question不存在,该视图将产生Http404异常。

get_list_or_404()函数和get_object_or_404()函数类似,不过返回结果是一个列表,如果列表为空则产生Http404异常。

编辑polls/templates/polls/detail.html如下:

<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>

使用浏览器访问“/polls/1/”,将看到问题“What’s up?”以及几个选项。访问“/polls/34”将看到404异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值