随笔 - 911  文章 - 5  评论 - 94  阅读 - 243万

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/可以返回上图。

 

posted on   momingliu11  阅读(1117)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示