Django -- Polls - Part 3

URL dispatcher

View 视图

通过Python函数(或一个类的方法)来生成一个页面;可能会涉及通过Database API访问数据库;通过模板渲染页面;处理请求中的GET,POST;

视图最终将返回:HttpResponse 或 异常 (Http404)

Django -- Polls - Part 3_第1张图片
mysite/settings.py

创建视图

视图 Index

# polls/views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Question

def index(request):
    lastest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'lastest_question_list': lastest_question_list}
    return render(request, 'polls/index.html', context)

# 复杂的实现
# from django.template import loader
# from .models import Question
# 
# def index(request):
#     latest_question_list = Question.objects.order_by('-pub_date')[:5]
#     template = loader.get_template('polls/index.html')
#     context = {
#         'latest_question_list': latest_question_list,
#     }
#     return HttpResponse(template.render(context, request))

创建模板

# polls/templates/polls/index.html

{% if lastest_question_list %}

模板的路径为 polls/templates/polls/index.html,第二个 /polls 为模板创建命名空间;

settings.pyAPP_DIR: True Django 会在APP目录下寻找模板


视图 detail

# polls/views.py
def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})

# polls/templates/polls/detail.html

{{ question.question_text }}

    {% for choice in question.choice_set.all %}
  • {{ choice.choice_text }}
  • {% endfor %}

django.shortcuts:Django 的设计原则就是要让各部分松耦合,每部分只做好其工作
get() -- get_object_or_404()
filter() -- get_list_or_404()

template guide


URL 软编码

Django -- Polls - Part 3_第2张图片
polls/urls.py
Django -- Polls - Part 3_第3张图片
polls/templates/polls/detail.html

你可能感兴趣的:(Django -- Polls - Part 3)