2.3 Created a true useful View

master
Jason Zhu 2020-10-20 15:28:25 +11:00
parent 8de2a0a82a
commit 44a2c72895
3 changed files with 26 additions and 1 deletions

View File

@ -184,3 +184,11 @@ Here `path()` function is passed **route** and **view**; two additional option a
> 当某人请求你网站的某一页面时——比如说, "/polls/34/" Django 将会载入 mysite.urls 模块,因为这在配置项 ROOT_URLCONF 中设置了。然后 Django 寻找名为 urlpatterns 变量并且按序匹配正则表达式。在找到匹配项 'polls/',它切掉了匹配的文本("polls/"),将剩余文本——"34/",发送至 'polls.urls' URLconf 做进一步处理。在这里剩余文本匹配了 "<int:question_id>/",使得我们 Django 以如下形式调用 polls.urls.detail(): > 当某人请求你网站的某一页面时——比如说, "/polls/34/" Django 将会载入 mysite.urls 模块,因为这在配置项 ROOT_URLCONF 中设置了。然后 Django 寻找名为 urlpatterns 变量并且按序匹配正则表达式。在找到匹配项 'polls/',它切掉了匹配的文本("polls/"),将剩余文本——"34/",发送至 'polls.urls' URLconf 做进一步处理。在这里剩余文本匹配了 "<int:question_id>/",使得我们 Django 以如下形式调用 polls.urls.detail():
> `detail(request=<HttpRequest object>, question_id=34)` > `detail(request=<HttpRequest object>, question_id=34)`
### Create a true useful View
每个视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse 对象,或者抛出一个异常,比如 Http404 。至于你还想干些什么,随便你。
你的视图可以从数据库里读取记录,可以使用一个模板引擎(比如 Django 自带的,或者其他第三方的),可以生成一个 PDF 文件,可以输出一个 XML创建一个 ZIP 文件,你可以做任何你想做的事,使用任何你想用的 Python 库。
`django.shortcuts.render` 可以“载入模板,填充上下文,再返回由它生成的 HttpResponse 对象“

View File

@ -0,0 +1,9 @@
{% 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 %}

View File

@ -1,8 +1,16 @@
from django.http import request, HttpResponse from django.http import request, HttpResponse
from django.shortcuts import render from django.shortcuts import render
from django.template import loader
from .models import Question
def index(request): def index(request):
return HttpResponse("Hello, world. You're at the polls index") 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))
def detail(request, question_id): def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id) return HttpResponse("You're looking at question %s." % question_id)