>[success] # 多對多菜單互相影響
場景,當選著父級菜單,展示對應的自己菜單,兩者互相關聯的狀態

多級菜單的時候,主要二級菜單是被一級菜單影響,所以所有二級菜單顯示情況根據一級菜單配合展示對應的數據情況
>[success] # 思路代碼
~~~
1.當一級菜單選擇全部的情況也就是0-0-0 或者0-1-0
1.1 當0-0-0的時候 展示二級菜單所有項目
1.2 當0-1-0的時候 也展示二級菜單所有項目,但要記錄在查詢數據庫的集合條件中
2.當一級菜單的選擇情況為1-0-0的時候,考慮二級菜單的情況,1-0-0/1-1-0/1-不存在-0
2.1 當二級菜單為0 也就是全部的時候,查詢對應1級菜單中對應的所有二級菜單選項,用來展示在頁面,查詢二級菜單的所有id,用來配合查詢內容展示
2.2 當二級菜單為指定的菜單時 也就是1-1-0,直接保存對應id
2.3 當二級菜單輸入的id不存在的時候,直接設置二級菜單的默認值為全部
3.當一級菜單不存在的時候,直接設置查詢全部
~~~
>[danger] ##### 代碼展示
~~~
def index(request,**kwargs):
concent = {}
for k,v in kwargs.items():
kwargs[k] = int(v)
work_id = kwargs['work_id']
language_id = kwargs['language_id']
# 第一種0-0-0
if work_id == 0:
obj_language = models.Language.objects.all()
# 第二種0-1-0
if language_id :
concent['language_id'] = language_id
# 第三種 1-0-0
else:
obj_work = models.Work.objects.filter(id=work_id).first()
if obj_work:
# 頁面展示對應標簽
obj_language = obj_work.language.all()
# 獲取所有的對應標簽id
v = obj_work.language.values_list('id')
if v:
language_list_id = list(zip(*v))[0]
else:
language_list_id = []
# 1-0-0 情況
if language_id == 0:
concent['language_id__in'] = language_list_id
else:
# 第四種 1-1-0情況
if language_id in language_list_id:
concent['language_id'] = language_id
# 第五種 1-1000-0 不存在的情況
else:
kwargs['language_id'] = 0
concent['language_id__in'] = language_list_id
else:
kwargs['language_id'] = 0
kwargs['work_id'] = 0
obj_language = models.Language.objects.all()
if kwargs['level_id']!=0:
concent['level_id'] = kwargs["level_id"]
obj_level = models.Level.objects.all()
obj_work = models.Work.objects.all()
content = models.Content.objects.filter(**concent)
return render(
request,
"index.html",
{
"obj_level":obj_level,
"obj_work": obj_work,
"content": content,
"kwargs": kwargs,
"obj_language":obj_language,
}
)
~~~
>[danger] ##### html展示
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
a{
display: inline-block;
padding: 3px 5px;
border:1px solid #dddddd;
margin: 5px 5px;
}
a.active{
background-color:yellowgreen;
}
</style>
</head>
<body>
<div>
{% if kwargs.work_id == 0 %}
<a class="active" href="/index/0-{{kwargs.language_id}}-{{kwargs.level_id}}">全部</a>
{% else %}
<a href="/index/0-{{kwargs.language_id}}-{{kwargs.level_id}}">全部</a>
{% endif %}
{% for i in obj_work %}
{% if kwargs.work_id == i.id %}
<a class="active" href="/index/{{i.id}}-{{kwargs.language_id}}-{{kwargs.level_id}}" >{{ i.name }}</a>
{% else%}
<a href="/index/{{i.id}}-{{kwargs.language_id}}-{{kwargs.level_id}}" >{{ i.name }}</a>
{% endif %}
{% endfor %}
</div>
<div>
{% if kwargs.language_id == 0 %}
<a class="active" href="/index/{{kwargs.work_id}}-0-{{kwargs.level_id}}">全部</a>
{% else %}
<a href="/index/{{kwargs.work_id}}-0-{{kwargs.level_id}}">全部</a>
{% endif %}
{% for i in obj_language %}
{% if kwargs.language_id == i.id %}
<a class="active" href="/index/{{kwargs.work_id}}-{{i.id}}-{{kwargs.level_id}}" >{{ i.name }}</a>
{% else%}
<a href="/index/{{kwargs.work_id}}-{{i.id}}-{{kwargs.level_id}}" >{{ i.name }}</a>
{% endif %}
{% endfor %}
</div>
<div>
{% if kwargs.level_id == 0 %}
<a class="active" href="/index/{{kwargs.work_id}}-{{kwargs.language_id}}-0">全部</a>
{% else %}
<a href="/index/{{kwargs.work_id}}-{{kwargs.language_id}}-0">全部</a>
{% endif %}
{% for i in obj_level %}
{% if kwargs.level_id == i.id %}
<a class="active" href="/index/{{kwargs.work_id}}-{{kwargs.language_id}}-{{i.id}}">{{ i.name }}</a>
{% else%}
<a href="/index/{{kwargs.work_id}}-{{kwargs.language_id}}-{{i.id}}">{{ i.name }}</a>
{% endif %}
{% endfor %}
</div>
<div>
<h1>展示</h1>
{% for i in content %}
{{ i.title }}
{% endfor %}
</div>
</body>
</html>
~~~
- 網絡原理
- 為搭建框架做準備
- 簡單認識網路
- 自定義模擬網站案例
- 優化最終框架
- 數據存儲 -- data
- 用戶個人信息存儲 -- User.txt
- 路由映射 -- routes
- 處理用戶信息 -- routes_static.py
- 保存靜態文件 -- static
- templates -- html 集中處理模塊
- 首頁 -- index.html
- 登陸 -- login.html
- 用戶注冊頁面 -- register
- 日志模塊 -- log.gua.txt
- 啟動文件--server.py
- orm處理 -- model.py
- 日志模塊 -- utils.py
- 兩種數據庫類型
- 傳統數據庫了解篇
- 前端快速入門
- JS簡單使用入門
- css簡單快速入門
- DJANGO
- virtualenv-創建虛擬環境
- 項目結構
- django-admin中文配置
- django-打印sql語句
- django-基礎
- 認識MVC和MTV
- Django--初識
- Django--初識案例
- Django-FBV/CBV
- Django--常用input 交互
- Django-url
- Django-url.py 配置
- Django-include 使用
- Django-url name
- Django-ORM
- ORM-數據庫配置
- ORM-model字段
- ORM-model字段解釋
- ORM-字段選項
- ORM-查詢
- ORM-四種常用查詢方法
- ORM-三種獲取數據
- ORM-其他查詢方式
- ORM-條件查詢雙線
- ORM-Q和F條件使用
- ORM-三種數據庫交互
- 案例 -- 一對多
- ORM-技巧/常見問題
- ORM-N+1 問題
- ORM-并發的處理
- ORM-數量查詢、
- ORM-正向反向查詢
- ORM-基礎案例一
- ORM-基礎一對多案例
- Django-templates
- Django-模板的繼承
- Django-模板的過濾
- Django-自定義模板的過濾
- Django-cookie
- Django-cookies 裝飾器
- Djang-session
- Django-CSRF
- Django-中間件 -- 后續了解
- Django- 緩存 -- 沒有深入了解
- Django-form
- From-ajax
- form-內部驗證處理
- form-屬性
- form-常用的標簽字段
- form-常用的下拉和選擇
- form-widget速查
- Django-ajax序列化
- Django-多種ajax寫法
- ajax-原生寫法
- ajax-$寫法
- ajax-ifram
- Django-ajax圖片上傳
- ajax-原始寫法
- ajax-正常寫法
- iframe+form
- 實戰寫法
- Django-常用自編寫組件
- Django-雙菜單組合搜索
- Django - 多菜單組合搜索
- Django-分頁
- django-綜合基礎
- 綜合基礎-render
- django-admin
- admin-頁面配置
- admin-字段配置
- admin-編輯頁面
- admin-forms驗證
- admin-創建抽象類
- django-驗證碼
- 驗證碼-第三方生成庫
- 驗證碼-view.py使用
- 驗證碼-注意引入Monaco.ttf
- django-用戶注冊
- 注冊-form 模塊
- 注冊-views 模塊
- 注冊-html模塊
- 注冊-model模塊
- django-用戶登錄三種
- session登錄
- form-session 寫法
- view-寫法
- Html-寫法
- model-寫法
- 繼承類登錄
- 外鍵關聯登錄
- django-簡單的student 管理案例
- app-urls.py
- app-models.py配置
- admin-admin.py配置
- app-form.py 和數據庫關聯的寫法
- app-FBV_views.py
- app-CBV_views.py
- templates-index.html
- django-博客系統
- APP目錄-models.py 創建
- APP目錄-基礎展示數據分析
- APP目錄-基礎數據展示cls
- ListView
- DetailView
- FormView
- 額外功能拓建
- 添加文章搜索/用戶文章查詢功能
- 增加一個友情鏈接
- 增加一個評論模塊
- App-利用Bootstrap4 搭建樣式
- 項目crm
- 思維導圖
- perfectCRM-項目名字
- settings.py-配置
- view.py-登陸/登出函數
- crm-app文件
- model.py-表的創建
- admin.py-注冊后臺
- view.py-視圖層
- static-靜態文件
- css
- bootstrap.min.css
- dashboard.css
- ie10-viewport-bug-workaround.css
- signin.css
- fonts
- imgs
- js
- jquery.js
- bootstrap.min.js
- holeder.js
- ie10-viewport-bug-workaround.js
- ie-emulation-modes-warning.js
- plugins
- html模板文件-templates
- crm
- index.html-首頁模板