LOADING

Follow me

Django View
十一月 29, 2013|Whistler

Django View


  1. 实现视图
  2. 视图是一个简单的 Python 方法,它接受一个请求对象,负责实现:

  1. 任何业务逻辑(直接或间接)
  2. 上下文字典,它包含模板数据
  3. 使用一个上下文来表示模板
  4. 响应对象,它将所表示的结果返回到这个框架中
  5. 在 Django 中,当一个 URL 被请求时,所调用的 Python 方法称为一个视图(view),这个视图所加载并呈现的页面称为模板(template)。由于这个原因,Django 小组将Django 称为一个
    MVT(model-view-template)框架。另一方面,TurboGears 把自己的方法称作
    控制器(controller),将所呈现的模板称为视图(view),因此缩写也是
    MVC。其区别在于广义的语义,因为它们所实现的内容是相同的。
  6. 最简单的视图可能会返回一个使用字符串初始化过的 HttpResponse 对象。创建下面的方法,并生成一个 /jobs HTTP 请求,以确保 urls.py
    和 views.py 文件都已经正确设置。
  7. 清单 25. jobs/views.py (v1)
  8. from django.utils.httpwrappers import HttpResponse

  9. def index(request):
  10.     return HttpResponse(“Job Index View”)
  11. 下面的代码将获取最近的 10 个职位,并通过一个模板呈现出来,然后返回响应。没有 下一节 中的模板文件,这段代码就无法 正常工作。
  12. 清单 26. jobs/views.py (v2)
  13. from django.template import Context, loader
  14. from django.http import HttpResponse
  15. from jobs.models import Job

  16. from django.template import Context, loader
  17. from django.http import HttpResponse
  18. from jobs.models import Job

  19. def index(request):
  20.     object_list = Job.objects.order_by(‘-pub_date’)[:10]
  21.     t = loader.get_template(‘jobs/job_list.html’)
  22.     c = Context({
  23.         ‘object_list’: object_list,
  24.     })
  25.     return HttpResponse(t.render(c))
  26. 在上面的代码中,模板是由 jobs/job_list.html 字符串进行命名的。该模板是使用名为 object_list 的职位列表的上下文呈现的。所呈现的模板字符串随后被传递到
    HTTPResponse 构造器中,后者通过这个框架被发送回请求客户机那里。
  27. 加载模板、创建内容以及返回新响应对象的步骤在下面都被 render_to_response 方法取代了。新增内容是详细视图方法使用了一个 get_object_or_404 方法,通过该方法使用所提供的参数获取一个
    Job 对象。如果没有找到这个对象,就会触发 404 异常。这两个方法减少了很多 Web 应用程序中的样板代码。
  28. 清单 27. jobs/views.py (v3)
  29. from django.shortcuts import get_object_or_404, render_to_response
  30. from jobs.models import Job

  31. def index(request):
  32.     object_list = Job.objects.order_by(‘-pub_date’)[:10]
  33.     return render_to_response(‘jobs/job_list.html’,
  34.                               {‘object_list’: object_list})

  35. def detail(request, object_id):
  36.     job = get_object_or_404(Job, pk=object_id)
  37.     return render_to_response(‘jobs/job_detail.html’,
  38.                               {‘object’: job})
  39. 注意,detail 使用 object_id 作为一个参数。这是前面提到过的
    jobs urls.py 文件中 
    /jobs/ URL 路径后面的数字。它以后会作为主键(pk)传递给 get_object_or_404 方法。
  40. 上面的视图仍然会失败,因为它们所加载和呈现的模板(jobs/job_list.html and jobs/job_detail.html)不存在。

版权声明:本文为博主原创文章,未经博主允许不得转载。

no comments
Share

发表评论