777ca50328
update. 调整融合主菜单与板块 update. 分离新闻模块
108 lines
3.3 KiB
Python
108 lines
3.3 KiB
Python
import os
|
|
import sys
|
|
|
|
import django
|
|
from loguru import logger
|
|
from pypinyin import lazy_pinyin, Style
|
|
|
|
# 配置 Django 环境
|
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings") # 修改为你的 settings 路径
|
|
django.setup()
|
|
|
|
from faker import Faker
|
|
from base.models import MainMenu
|
|
|
|
# 初始化 Faker,设置中文(如果需要中文名)
|
|
# 初始化 Faker (zh_CN 生成中文数据)
|
|
fake = Faker('zh_CN')
|
|
|
|
# --- 核心数据结构:定义你的菜单层级 ---
|
|
MENU_STRUCTURE = {
|
|
"信息公开": [
|
|
"通知通告", "法律法规", "政策文件", "政策解读"
|
|
],
|
|
"党建引领": [
|
|
"党建工作", "党建轮播", "党风廉政", "先进典型"
|
|
],
|
|
"互动交流": [
|
|
"专家访谈", "调查征集", "在线咨询"
|
|
],
|
|
"消防科普": [
|
|
"数字消防", "火灾预防", "自救逃生"
|
|
],
|
|
"办事服务": [
|
|
"办事指南", "政务服务", "资料下载", "办事统计"
|
|
]
|
|
}
|
|
|
|
|
|
def get_slug(text):
|
|
"""
|
|
将中文转换为拼音 Slug
|
|
例如: "信息公开" -> "xin-xi-gong-kai"
|
|
"""
|
|
# lazy_pinyin 返回拼音列表,join 将其用 '-' 连接
|
|
return "-".join(lazy_pinyin(text, style=Style.NORMAL))
|
|
|
|
|
|
def seed_main_menu():
|
|
logger.info("🚀 开始生成站点导航数据...")
|
|
|
|
# 1. 清空旧数据 (可选,如果需要重置数据请取消注释)
|
|
MainMenu.objects.all().delete()
|
|
logger.info("🧹 已清空旧数据")
|
|
|
|
created_count = 0
|
|
|
|
# 2. 循环创建主菜单和子板块
|
|
for main_title, sub_titles in MENU_STRUCTURE.items():
|
|
# --- 创建主菜单 ---
|
|
# 生成唯一的 code,例如 "xin-xi-gong-kai"
|
|
main_code = get_slug(text=main_title)
|
|
logger.info(f"主菜单: [{main_title}] Code: [{main_code}]")
|
|
main_menu, created = MainMenu.objects.get_or_create(
|
|
title=main_title,
|
|
defaults={
|
|
'code': main_code,
|
|
'url': main_code, # 模拟 URL
|
|
'is_external': False,
|
|
'order': created_count,
|
|
'visible': True
|
|
}
|
|
)
|
|
|
|
if created:
|
|
logger.info(f"✅ 创建主菜单: [{main_title}]")
|
|
else:
|
|
logger.info(f"⏭️ 主菜单已存在: [{main_title}]")
|
|
|
|
# --- 创建子板块 ---
|
|
for idx, sub_title in enumerate(sub_titles):
|
|
sub_code = get_slug(text=sub_title)
|
|
logger.info(f"子菜单: [{sub_title}] Code: [{sub_code}]")
|
|
sub_menu, sub_created = MainMenu.objects.get_or_create(
|
|
title=sub_title,
|
|
parent=main_menu, # 关键:关联父级
|
|
defaults={
|
|
'code': sub_code,
|
|
'url': sub_code,
|
|
'is_external': False,
|
|
'order': idx, # 子菜单排序
|
|
'visible': True
|
|
}
|
|
)
|
|
|
|
if sub_created:
|
|
logger.info(f" └─ ✅ 创建子板块: [{sub_title}]")
|
|
else:
|
|
logger.info(f" └─ ⏭️ 子板块已存在: [{sub_title}]")
|
|
|
|
created_count += 1
|
|
|
|
logger.info(f"\n🎉 导航数据生成完毕!共处理 {len(MENU_STRUCTURE)} 个主菜单。")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
seed_main_menu()
|