update. 完善基础信息配置以及页面链接处理

This commit is contained in:
2026-04-02 00:49:21 +08:00
parent b8d53a4c2e
commit 66dd4916d1
17 changed files with 218 additions and 275 deletions
+3 -3
View File
@@ -1,7 +1,7 @@
from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from base.models import MainMenu, FooterLink, LinkCategory, FriendLink
from base.models import MainMenu, BaseInfo, LinkCategory, FriendLink
# —————— 主菜单 ——————
@@ -61,7 +61,7 @@ class FriendLinkAdmin(ImportExportModelAdmin):
# —————— 页脚链接 ——————
@admin.register(FooterLink)
class FooterLinkAdmin(ImportExportModelAdmin):
@admin.register(BaseInfo)
class BaseInfoAdmin(ImportExportModelAdmin):
list_display = ('title', 'address', 'unit', 'postal', 'telephone', 'fax', 'filing')
list_editable = ('postal', 'telephone', 'fax', 'unit', 'filing',)
+16
View File
@@ -0,0 +1,16 @@
from base.models import BaseInfo, LinkCategory, MainMenu
def site_info(request):
"""
为所有模板提供站点信息
"""
site_info_obj = BaseInfo.objects.filter(is_active=True).first()
link_categories = LinkCategory.objects.filter(is_active=True).prefetch_related('links')
menus = MainMenu.objects.filter(visible=True, parent__isnull=True).order_by('order')
return {
'site_info': site_info_obj,
'link_categories': link_categories,
'menus': menus,
}
@@ -0,0 +1,39 @@
# Generated by Django 6.0.3 on 2026-04-01 14:41
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0002_alter_friendlink_options_alter_linkcategory_options_and_more'),
]
operations = [
migrations.CreateModel(
name='BaseInfo',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
('title', models.CharField(max_length=128, verbose_name='单位名称')),
('e_title', models.CharField(max_length=256, verbose_name='英文名称')),
('address', models.CharField(max_length=200, verbose_name='单位地址')),
('postal', models.CharField(default='', verbose_name='邮编')),
('telephone', models.CharField(default='', verbose_name='服务热线')),
('fax', models.CharField(default='', verbose_name='传真')),
('unit', models.CharField(default='', verbose_name='版权单位')),
('filing', models.CharField(default='', verbose_name='备案号')),
('official_account', models.ImageField(default='', upload_to='carousel/', verbose_name='公众号二维码')),
('weibo', models.ImageField(default='', upload_to='carousel/', verbose_name='微博二维码')),
('is_active', models.BooleanField(default=False, verbose_name='生效')),
],
options={
'verbose_name': '单位信息',
'verbose_name_plural': '单位信息',
},
),
migrations.DeleteModel(
name='FooterLink',
),
]
+6 -5
View File
@@ -114,8 +114,9 @@ class MainMenu(BaseEntity):
return self.children.filter(visible=True)
class FooterLink(BaseEntity):
title = models.CharField("页脚信息", max_length=50)
class BaseInfo(BaseEntity):
title = models.CharField("单位名称", max_length=128)
e_title = models.CharField("英文名称", max_length=256)
address = models.CharField("单位地址", max_length=200)
postal = models.CharField("邮编", default="")
telephone = models.CharField("服务热线", default="")
@@ -127,8 +128,8 @@ class FooterLink(BaseEntity):
is_active = models.BooleanField("生效", default=False)
class Meta:
verbose_name = "页脚信息"
verbose_name_plural = "页脚管理"
verbose_name = "单位信息"
verbose_name_plural = "单位信息"
def __str__(self):
return f"{self.title} - 状态:{'使用中' if self.is_active else '已停用'}"
@@ -138,7 +139,7 @@ class FooterLink(BaseEntity):
if self.is_active:
# 2. 将数据库中【除了当前这条】以外的所有 FooterLink 都更新为“不生效”
# self.pk 是当前对象的唯一标识
FooterLink.objects.exclude(pk=self.pk).update(is_active=False)
BaseInfo.objects.exclude(pk=self.pk).update(is_active=False)
# 3. 执行正常的保存操作
super().save(*args, **kwargs)
View File
-38
View File
@@ -1,38 +0,0 @@
from django import template
from loguru import logger
from ..models import FooterLink, LinkCategory, MainMenu # 假设你的模型在当前目录的上一级 models.py 中
register = template.Library()
# inclusion_tag 装饰器会自动帮你渲染指定的模板
@register.inclusion_tag('components/footer.html')
def show_footer():
# 1. 获取当前生效的那一条页脚数据
# 根据你之前的模型,is_active=True 的只有一条
footer = FooterLink.objects.filter(is_active=True).first()
link_categories = LinkCategory.objects.filter(is_active=True)
logger.info(footer)
logger.info(link_categories)
# 3. 将数据传递给模板
return {
'footer': footer,
'categories': link_categories
}
@register.inclusion_tag('components/main_menu.html', takes_context=True)
def show_main_menu(context):
request = context['request']
# 1. 获取当前生效的那一条页脚数据
# 根据你之前的模型,is_active=True 的只有一条
menus = MainMenu.objects.filter(visible=True, parent__isnull=True).order_by('order')
logger.info(menus)
# 3. 将数据传递给模板
return {
'menus': menus,
'request': request,
}