当前位置: 首页 > Web前端 > HTML

个人博客添加后台管理友情链接和全站公告功能

时间:2023-04-02 15:51:35 HTML

个人博客站点添加友情链接和全站公告通知功能,写一篇文章记录一下。首先,我考虑使用Django的模板标签,也是为了练习。相关知识可以查看Django官方文档。下面是具体实现。友情链接功能模型其实友情链接可以直接写在首页的html中(我现在还没有友情链接~),但是我想通过后台管理这个数据,所以就干脆建了一个名为extras的应用程序。pythonmanage.pystartappextras编辑models.py文件:fromdjango.dbimportmodelsfrommodel_utils.modelsimportTimeStampedModelfromdjango.utils.translationimportgettext_lazyas_#Createyourmodelshere.classFriendLink(TimeStampedModel):site_name=models.CharField_('site_name'),max_length=100)site_domain=models.URLField(_('site_domain'))def__str__(self):returnself.site_nameTimeStampedModel是一个抽象基类,提供字段的自更新创建和修改.这里的gettext_lazy是用来国际化的,对我这个破站小网站来说其实没什么用。之所以会这样,是我从追梦人的开源代码里抄了这段,懒得改了。写完代码不要忘记模型迁移。这里使用模板标签来包含标签。首先在app目录下创建一个templatetags目录,并在其中创建一个__init__.py文件,使其成为一个package。然后创建sidebar_tags.py并在其中编写我们的Python代码。从django导入模板from..modelsimportFriendLinkregister=template.Library()@register.inclusion_tag('inclusions/_friend_link.html',takes_context=True)defshow_friend_links(context,num=5):friend_link_list=FriendLink.objects.all()[:num]return{'friend_link_list':friend_link_list}默认显示5条数据,django模板标签可以接收参数,可以像{%show_friend_links5%}这样使用。注意这里使用了inclusion标签,@register.inclusion_tag('inclusions/_friend_link.html',takes_context=True)写的是装饰器中需要包含的模板路径。include标签通过渲染包含的模板来显示数据。所以在放置模板的templates文件夹中创建对应的文件:友情链接

{%iffriend_link_list%}{%forlinkinfriend_link_list%}{{link.site_name}}

{%endfor%}{%endif%}
使用bootstrap卡片样式,比较好看。接下来,在需要使用标签的地方使用{%loadsidebar_tags%}加载标签,在需要添加标签的地方使用{%show_friend_links%}。全站公告功能也是如此,同样放在扩展功能app中。ModelclassSiteMessage(TimeStampedModel):content=models.TextField(verbose_name="text")classMeta:verbose_name_plural='Notification'def__str__(self):returnself.content[:20]同样使用TimeStampedModel来节省写作创作时间,程序组员就是想偷懒,啦啦啦~同样,写完了也要迁移。Tag#ToaddimportthisSiteMessageclassfrom..modelsimportFriendLink,SiteMessage@register.inclusion_tag('inclusions/_site_message.html',takes_context=True)defshow_site_message(context):尝试:message=SiteMessage.objects.last()data={'content':message.content.replace("\r\n","
"),'created':message.created.strftime("%Y/%m/%d"),}except:data={"content":"o(╥﹏╥)oserverconnectionfailed~"}returndata每次通过SiteMessage.objects.last()只取最新的数据。使用方法同上。关于网页结构的效果图为了让页面显示更协调,我花了很多时间,前端真是博大精深(太难了)。一开始我有两个base.html文件,一个有侧边栏,一个没有,按需继承。然后我修改了base.html,修复了侧边栏,把它放在{%blockside%}{%endblockside%},把两个标签都放进去。在文章详情页,侧边栏需要一个目录。在目录下使用{%block.super%}来显示父级的内容。之前我以为目录侧边栏会随着鼠标的滚动固定在页面上,而其他两侧的内容会自动消失。之前用过bootstrap的scroll监控,后来发现在侧边栏显示更多的内容比全部放好更好。进入粘性侧边栏。最后还是只有一个base.html文件(写这篇文章的时候发现忘记删掉没用的了。。。),去掉了侧边栏块。代码都放在Github上了,关注公众号查看最下方菜单的Github地址。扫描二维码关注龚自政宅家日常,第一时间查看最新推送: