通用视图

向用户展示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.index, name=‘index‘),

    # url(r‘^vmmgmt/$‘, views.vmmgmt, name=‘vmmgmt‘,{‘template_name‘:‘sinfors/vmmgmt.html‘}), #在view中使用render_to_response传递template_name参数 defvmmgmt(request,template_name)
    url(r‘^vmmgmt-vms/$‘, views.vmmgmt,{‘model‘:models.hvvms},name=‘vmmgmt-vms‘), #通过 model 参数直接传递模型类
    url(r‘^vmmgmt-hv/$‘, views.vmmgmt,{‘model‘:models.hvsrvs},name=‘vmmgmt-hv‘),
    url(r‘^vmmgmt-vhd/$‘, views.vmmgmt,{‘model‘:models.hvvhds},name=‘vmmgmt-vhd‘),

]

2.编辑views.py

def vmmgmt(request,model): #接收url中的model参数
    obj_list = model.objects.all() #从url中的 model 参数接收到具体的model类。模板中要使用 obj_list 变量做for循环
    counts = model.objects.count()

    if request.method == ‘GET‘:
        if ‘q-hv‘ in request.GET:
            qdata = request.GET[‘q-hv‘]
            if qdata is not None:
                obj_list = model.objects.filter(serverip__icontains=qdata)
                counts = len(obj_list)
    context={‘obj_list‘:obj_list,‘counts‘:counts}
    template_name = ‘sinfors/vmmgmt_%s.html‘  % model.__name__.lower() # 每个Python的类都有一个 __name__ 属性返回类名。 这特性在当我们直到运行时刻才知道对象类型的这种情况下很有用。 比如, hvvms 类的 __name__ 就是字符串 ‘hvvms‘ 。
    return render(request,template_name,context)  #####return render_to_response(template_name,context)无法接收csrfmiddretoken参数

3.已有如下model和模板:

model:

hvvms.objects.all() #虚机信息
hvsrvs.objects.all() #宿主信息
hvvhds.objects.all() #vhd信息

模板:

vmmgmt_hvvms #虚机模板
vmmgmt_hvsrvs #宿主模板
vmmgmt_hvvhds #VHD模板

时间: 2024-10-12 17:15:03

通用视图的相关文章

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

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

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 

基于类的通用视图

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

django通用视图

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

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

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

django 类通用视图详解

view() :     该类为所有类视图的父类,处于最底层,仅仅只对请求参数做校验后,给特定请求方法做特定调用. 用法: url中定位到类方法:Aa.as_view() --> View.as_view()方法对请求参数做判断后,转到View.dispatch() --> 找到Aa.get() 或者Aa.post() 或者Aa.其他请求方法 --->处理完成后返回view()     需要对请求方式做特定处理,可以自行修改dispatch()方法.   源码: class View(o

Django - 通用视图

urls.py from . import views ... url(r'^$', views.IndexView.as_view, name="index"), url(r'^(?P<pk>\d+)$', views.DetailView.as_view(), name="detail"), #DetailView一定要使用pk views.py from django.views import generic from .models import

Django:之Sitemap站点地图、通用视图和上下文渲染器

Django中自带了sitemap框架,用来生成xml文件 Django sitemap演示: sitemap很重要,可以用来通知搜索引擎页面的地址,页面的重要性,帮助站点得到比较好的收录. 开启sitemap功能的步骤 settings.py文件中django.contrib.sitemaps和django.contrib.sites要在INSTALL_APPS中 INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth',

Django 通用类视图

引文 所有的类视图都继承django.views.generic.base.View类. 在URLconf中简单的使用通用视图 如果只是简单的做一些属性修改,可以使用as_view()方法,如下所示: from django.urls import path from django.views.generic import TemplateView urlpatterns = [ path('about/', TemplateView.as_view(template_name="about.h