python_django 返回和 通用视图

普通方式:HttpResponse

polls/views.py
from django.http import HttpResponsefrom django.template import RequestContext, loaderfrom .models import Questiondef index(request):
    latest_question_list = Question.objects.order_by(‘-pub_date‘)[:5]
    template = loader.get_template(‘polls/index.html‘)    # 载入一个模板
    context = RequestContext(request, {           # 填充一个context
        ‘latest_question_list‘: latest_question_list,
    })
    return HttpResponse(template.render(context))       # 返回HttpResponse

常见的习惯是载入一个模板、填充一个context 然后返回一个含有模板渲染结果的HttpResponse对象

快捷返回:render()

polls/views.py
from django.shortcuts import renderfrom .models import Questiondef 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)

普通:404错误

polls/views.py
from django.http import Http404from django.shortcuts import renderfrom .models import Question# ...def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404("Question does not exist")
    return render(request, ‘polls/detail.html‘, {‘question‘: question})

快捷:get_object_or_404()

polls/views.py
from django.shortcuts import get_object_or_404, renderfrom .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})

通用视图

实际上就是调用一个类的函数作为视图,我们只需继承这个模板类,修改必要的参数或重写一些函数即可

# polls/urls.py
url(r‘^$‘, views.IndexView.as_view(), name=‘index‘)
# DetailView期望从URL中捕获名为"pk"的主键值,即模板得到的对象 是给定模型主键值为pk的对象
url(r‘^(?P<pk>[0-9]+)/$‘, views.DetailView.as_view(), name=‘detail‘),
# polls/views.py

class IndexView(generic.ListView):
    # 指定模板路径
    template_name = ‘polls/index.html‘
    # 指定对象的名字
    context_object_name = ‘latest_question_list‘
    # 这个是重写了获得查询集的方法,直接返回了需要的部分,只写个model = Question不满足需求
    def get_queryset(self):
        """Return the last five published questions."""
        return Question.objects.order_by(‘-pub_date‘)[:5]
        
        
 class DetailView(generic.DetailView):
    # 会传给模板一个object_list中主键为pk对象的变量
    model = Question
    template_name = ‘polls/detail.html‘
# polls/index.html
{{  object_list }}      # 在模板中通过友好名调用和object_list都可以
{{ latest_question_list }} # 默认变量名是  model名字的小写_list
       

# polls/detail.html
{{ object }}        # 在模板中通过友好名调用和object都可以

{{ question }}      # 默认变量名是model的名字的小写
generic.ListView    传给模板的是个对象列表,如:[<Question: sssssssfeew>, <Question: wogaibiancs>, <Question: timeShow?>, <Question: timeShow?>, <Question: what‘s up?>] 
generic.DetailView    传给模板的是个对象,如:sssssssfeew
时间: 2024-10-10 00:23:42

python_django 返回和 通用视图的相关文章

基于类的通用视图

基于类的通用视图 前面我们说过了django的通用视图,不知道django通用视图的去看我前面的随笔,谢谢 django的通用视图帮我们省略了很多代码,但有时候django的通用视图并不能满足我们全部的需求,例如像重定义一些属性和方法的时候,或者我们想换种写法的时候,因此,django提供了基于类的通用视图,通过子类或者在url中传参的方法来配置我们的基于类的通用视图 通用视图和基于类的通用视图是两种不一样的写法,前面我们介绍的通用视图,所有的代码集中于url的配置文件中,而基于类的通用视图主要

通用视图

向用户展示hvvms.hvsrvs.hvvhds信息,除了model名称不同,view中的功能都相同,所以可以通过通用视图实现,减少代码重复 参考:http://djangobook.py3k.cn/2.0/chapter08/ 1.编辑urls.py from django.conf.urls import * from django.conf.urls import url from . import views,models urlpatterns = [ url(r'^$', views

django通用视图

通用视图 1. 前言 回想一下,在Django中view层起到的作用是相当于controller的角色,在view中实施的 动作,一般是取得请求参数,再从model中得到数据,再通过数据创建模板,返回相应 响应对象.但在一些比较通用的功能中,比如显示对象列表,显示某对象信息,如果反复 写这么多流程的代码,也是一件浪费时间的事,在这里,Django同样给我们提供了类似的 "shortcut"捷径--通用视图. 2. 使用通用视图 使用通用视图的方法就是在urls.py这个路径配置文件中进

Django学习之通用视图(generic views)

Django的通用视图可以减少开发的单调性,它抽象出一些在视图开发中常用的代码和模式,这样就可以在无需编写大量代码的情况下,快速编写出常用的视图函数.下面将使用通用视图重写前面所写的代码.要使用通用视图,我们需要做几件事: 修改URLconf 编写基于通用视图的视图函数 1.修改URLconf from django.conf.urls import patterns,url from blog.views import * urlpatterns = patterns('', url(r'^$

django:通用视图-UpdateView更新有参数的form类

这个提示放在开始:要想使用通用视图更新form,那么这个form的类型必须是ModelForm, 即: class FileForm(forms.ModelForm): .... 不要问我为什么知道的 ------------------------------------------------------------------------------------------------------ 首先:urls.py #coding=utf-8 from django.conf.urls

SpringMVC返回数据到视图

通过ModelAndView对象返回数据到视图 在SpringMVC中有一个ModelAndView对象,如其名,Model代表模型,View代表视图,这个名字就很好地解释了该类的作用--它用来存储模型数据以及显示该数据的视图名称.在控制器中调用完模型层处理完用户的请求后,我们可以把结果数据存储在该对象的model属性中,把要返回的视图信息存储在该对象的view属性中,然后让把ModelAndView对象返回给SpringMVC框架.框架则会通过调用Spring配置文件中定义的视图解析器,对该对

Tabbar视图切换,返回上一视图,添加item

前面有一篇博文iOS学习之Tab Bar的使用和视图切换 这是在AppDelegate里使用Tabbar,这样的程序打开就是TabbarView了,有时候我们需要给程序做一些帮助页面,或者登录页面,之后才跳转到tabbar View里,或者后面的页面才使用Tabbar的,那这样怎么实现呢? 我们建立一个视图,然后在这个视图通过[selfpresentModalViewController : tabBaranimated:YES];跳转来实现. 当程序中需要在多个View直接切换的时候,可以使用

返回上一视图,凸显一个视图,其他视图变模糊

// //  AchievementViewController.m //  LIBAOZHENG0826 // //  Created by 张艳锋 on 15/8/27. //  Copyright (c) 2015年 张艳锋. All rights reserved. // #import "AchievementViewController.h" #import "LBZModelDataAll.h" #import "LBZPrefixHeade

如何关闭UINavigationController 向右滑动 返回上一层视图

说明一下: 我的nav 设置的rootview 是 tabbarcontroller,登录界面是push进去的,所以,在登录界面,如果靠近最左边 向右滑动 会出现 tabbarcontroller的视图, iOS 7中在传统的左上角返回键之外,提供了右滑返回上一级界面的手势.支持此手势的是UINavigationController中新增的属性 interactivePopGestureRecognizer,即右滑返回只支持以UINavigationController为容器的ViewContr