zoukankan      html  css  js  c++  java
  • django 板块动态切换

    需求:在同一页面的不同板块上可以实现动态切换,使用一个view实现,具体如下图所示,点击phy显示物理机列表,点击vm显示虚机列表,phy、vm对应的url均是动态生成:

                 

    实现思路:

    1.新建两个表,servers表用于存放服务器种类,pvserver物理机虚机具体服务器信息。物理机和虚机不要分别存放于两个表中,这样的话在view中无法直接通过服务器类型得出相应的服务器列表

    #存放服务器类型
    class servers(models.Model):
        serverid = models.IntegerField(primary_key=True,unique=True)
        servertype = models.CharField(max_length=20)
        def __str__(self):
            return self.servertype
    
    #存储物理机和虚机服务器列表
    class pvserver(models.Model): 
        servertype = models.ForeignKey(servers,to_field='serverid',db_column='servertype') #设置外键,关联到servers表的serverid,保证服务器类型的一致
        name = models.CharField(max_length=100)
        def __str__(self):
            return self.name

    2.两个表同步到DB后,将其注册到admin后台,用于添加服务器信息

    from .models import hv,vm,servers,physerver,vmserver,pvserver
    class serversAdmin(admin.ModelAdmin):
        #fields = ['sn', 'ip']
        fieldsets = [
            (None,               {'fields': ['serverid']}),
            (None,               {'fields': ['servertype']}),
    
        ]
        list_display = ('serverid', 'servertype') #add more columns.
    admin.site.register(servers,serversAdmin)  
    class pvserverAdmin(admin.ModelAdmin):
        #fields = ['sn', 'ip']
        fieldsets = [
            (None,               {'fields': ['servertype']}),
            (None,               {'fields': ['name']}),
    
        ]
        list_display = ('servertype', 'name') #add more columns.
    admin.site.register(pvserver,pvserverAdmin)  

    3.新建view:

    方法一(简单),直接查询pvserver表:

    def servers(request,serverid): #serverid从下面的types中遍历出来,为了省事,才在该视图下使用types,其实types应该从另一个页面下使用
        types = serversm.objects.all() #得出所有的服务器种类,在前端web展示
        serverall = pvserver.objects.filter(servertype=serverid)
        context={'serverall':serverall,'types':types}
        return render(request,'aptest/servers.html',context)

    方法二,先查询servers表,然后再通过外键查询pvserver表:

    def servers(request,serverid): #serverid从下面的types中遍历出来,为了省事,才在该视图下使用types,其实types应该从另一个页面下使用
        serverlist = serversm.objects.get(serverid=serverid) #from aptest.models import servers as serversm
        types = serversm.objects.all() #得出所有的服务器种类,在前端web展示
        serverall = serverlist.pvserver_set.all() #根据服务器种类遍历出相应的服务器列表
        context={'serverall':serverall,'types':types}
        return render(request,'aptest/servers.html',context)

    4.编辑url:

    url(r'^servers/(d+)/$', aptest.servers),

    5.访问http://192.168.50.74/aptest/servers/2/可以返回上图。

  • 相关阅读:
    Android Studio的git功能的使用介绍
    如何用Android Studio同时使用SVN和Git管理项目
    【.NET深呼吸】动态类型(扩充篇)
    【.net深呼吸】动态类型(高级篇)
    【.net深呼吸】动态类型(娱乐篇)
    VS 2015相当不错的功能:C#交互窗口
    计算照片的面积(WPF篇)
    计算照片的面积(UWP篇)
    【Win 10应用开发】把文件嵌入到XML文档
    【.NET深呼吸】基础:自定义类型转换
  • 原文地址:https://www.cnblogs.com/dreamer-fish/p/5483682.html
Copyright © 2011-2022 走看看