update. 完善基础信息配置以及页面链接处理
This commit is contained in:
+3
-3
@@ -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',)
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
Reference in New Issue
Block a user