Django -- Polls - Part 3

URL dispatcher

View 视图

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

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

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 %}
<ul>
    {% for question in lastest_question_list %}
    <li>
        <a href="{{ question.id }}">{{ question.question_text }}</a>
    </li>
    {% endfor %}
{% else %}
    <p>No Question!</p>
{% endif %}

模板的路径为 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

<h1>{{ question.question_text }}</h1>

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

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

template guide


URL 软编码

polls/urls.py
polls/templates/polls/detail.html
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容