diff --git a/myblog/blog/admin.py b/myblog/blog/admin.py
index 940654e..86f4d15 100644
--- a/myblog/blog/admin.py
+++ b/myblog/blog/admin.py
@@ -17,14 +17,20 @@ class PostAdmin(admin.ModelAdmin):
class SiteSettingsAdmin(admin.ModelAdmin):
- list_display = ('summary_length',)
-
+ # 保持所有字段在列表中显示,方便直接编辑
+ list_display = ('id', 'summary_length', 'contact_email', 'contact_wechat', 'contact_linkedin', 'contact_github')
+ list_display_links = ('id',)
+
def has_add_permission(self, request):
# 限制只能有一个站点设置实例
return not SiteSettings.objects.exists()
+ def has_delete_permission(self, request, obj=None):
+ # 禁止删除站点设置
+ return False
+
# 注册自定义的PostAdmin
admin.site.register(Post, PostAdmin)
admin.site.register(Category)
-admin.site.register(SiteSettings, SiteSettingsAdmin)
\ No newline at end of file
+admin.site.register(SiteSettings, SiteSettingsAdmin)
diff --git a/myblog/blog/migrations/0009_sitesettings_contact_email_and_more.py b/myblog/blog/migrations/0009_sitesettings_contact_email_and_more.py
new file mode 100644
index 0000000..8895291
--- /dev/null
+++ b/myblog/blog/migrations/0009_sitesettings_contact_email_and_more.py
@@ -0,0 +1,33 @@
+# Generated by Django 5.1 on 2025-07-27 15:53
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('blog', '0008_sitesettings'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='sitesettings',
+ name='contact_email',
+ field=models.EmailField(blank=True, help_text='联系邮箱', max_length=254, null=True),
+ ),
+ migrations.AddField(
+ model_name='sitesettings',
+ name='contact_github',
+ field=models.URLField(blank=True, help_text='GitHub链接', null=True),
+ ),
+ migrations.AddField(
+ model_name='sitesettings',
+ name='contact_linkedin',
+ field=models.URLField(blank=True, help_text='LinkedIn链接', null=True),
+ ),
+ migrations.AddField(
+ model_name='sitesettings',
+ name='contact_wechat',
+ field=models.CharField(blank=True, help_text='微信号', max_length=100, null=True),
+ ),
+ ]
diff --git a/myblog/blog/models.py b/myblog/blog/models.py
index b1d15a5..c3c81bd 100644
--- a/myblog/blog/models.py
+++ b/myblog/blog/models.py
@@ -22,7 +22,11 @@ class Category(models.Model):
# 添加站点设置模型
class SiteSettings(models.Model):
summary_length = models.IntegerField(default=50, help_text="文章摘要字符长度")
-
+ contact_email = models.EmailField(blank=True, null=True, help_text="联系邮箱")
+ contact_wechat = models.CharField(max_length=100, blank=True, null=True, help_text="微信号")
+ contact_linkedin = models.URLField(blank=True, null=True, help_text="LinkedIn链接")
+ contact_github = models.URLField(blank=True, null=True, help_text="GitHub链接")
+
class Meta:
verbose_name = "站点设置"
verbose_name_plural = "站点设置"
diff --git a/myblog/blog/templates/blog/detail.html b/myblog/blog/templates/blog/detail.html
index 67326e4..1593d46 100644
--- a/myblog/blog/templates/blog/detail.html
+++ b/myblog/blog/templates/blog/detail.html
@@ -159,6 +159,30 @@
background-color: white;
padding: 5px 0;
}
+
+ .contact-info {
+ background-color: #f9f9f9;
+ padding: 15px;
+ border-radius: 5px;
+ margin-top: 20px;
+ border: 1px solid #eee;
+ }
+
+ .contact-info h3 {
+ margin-top: 0;
+ color: #333;
+ border-bottom: 2px solid #007cba;
+ padding-bottom: 10px;
+ }
+
+ .contact-info ul {
+ padding-left: 20px;
+ }
+
+ .contact-info li {
+ margin: 10px 0;
+ color: #666;
+ }
@@ -203,6 +227,25 @@
{% endfor %}
+
+
+
diff --git a/myblog/blog/templates/blog/index.html b/myblog/blog/templates/blog/index.html
index edd5477..31d626f 100644
--- a/myblog/blog/templates/blog/index.html
+++ b/myblog/blog/templates/blog/index.html
@@ -159,6 +159,30 @@
footer {
}
+
+ .contact-info {
+ background-color: #f9f9f9;
+ padding: 15px;
+ border-radius: 5px;
+ margin-top: 20px;
+ border: 1px solid #eee;
+ }
+
+ .contact-info h3 {
+ margin-top: 0;
+ color: #333;
+ border-bottom: 2px solid #007cba;
+ padding-bottom: 10px;
+ }
+
+ .contact-info ul {
+ padding-left: 20px;
+ }
+
+ .contact-info li {
+ margin: 10px 0;
+ color: #666;
+ }
@@ -207,6 +231,25 @@
{% endfor %}
+
+
+
diff --git a/myblog/blog/views.py b/myblog/blog/views.py
index bb3c23d..82e5300 100644
--- a/myblog/blog/views.py
+++ b/myblog/blog/views.py
@@ -22,6 +22,7 @@ def index(request):
site_settings = SiteSettings.objects.first()
summary_length = site_settings.summary_length if site_settings else 50
except SiteSettings.DoesNotExist:
+ site_settings = None
summary_length = 50
# 根据分类和搜索关键词筛选文章
@@ -53,11 +54,16 @@ def index(request):
'categories': categories,
'selected_category': category_id,
'query': query,
- 'search_type': search_type
+ 'search_type': search_type,
+ 'site_settings': site_settings
})
def detail(request, post_id):
post = get_object_or_404(Post, pk=post_id)
categories = Category.objects.all() # 获取所有分类用于侧边栏
- return render(request, 'blog/detail.html', {'post': post, 'categories': categories})
\ No newline at end of file
+ try:
+ site_settings = SiteSettings.objects.first()
+ except SiteSettings.DoesNotExist:
+ site_settings = None
+ return render(request, 'blog/detail.html', {'post': post, 'categories': categories, 'site_settings': site_settings})