From 57531f8cdfc224514bc20c9afc4307577d9dc8253607dbbeeb5d754aeb6208b2 Mon Sep 17 00:00:00 2001 From: yuangyaa Date: Mon, 28 Jul 2025 00:32:48 +0800 Subject: [PATCH] Add link_me in the view --- myblog/blog/admin.py | 12 ++++-- ...009_sitesettings_contact_email_and_more.py | 33 ++++++++++++++ myblog/blog/models.py | 6 ++- myblog/blog/templates/blog/detail.html | 43 +++++++++++++++++++ myblog/blog/templates/blog/index.html | 43 +++++++++++++++++++ myblog/blog/views.py | 10 ++++- 6 files changed, 141 insertions(+), 6 deletions(-) create mode 100644 myblog/blog/migrations/0009_sitesettings_contact_email_and_more.py 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 %} + + +
+

联系我

+
    + {% if site_settings.contact_email %} +
  • 邮箱: {{ site_settings.contact_email }}
  • + {% endif %} + {% if site_settings.contact_wechat %} +
  • 微信: {{ site_settings.contact_wechat }}
  • + {% endif %} + {% if site_settings.contact_linkedin %} +
  • LinkedIn: {{ site_settings.contact_linkedin }}
  • + {% endif %} + {% if site_settings.contact_github %} +
  • GitHub: {{ site_settings.contact_github }}
  • + {% endif %} +
+
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})