关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
之前就想给我的网站添加公告栏之类的东西,通知访客一些消息。
但不喜欢右下角弹窗的形式,因为这种形式用户体验不是很好。
也不想在首页加一行或者开辟专门的地方显示公告。因为目前的首页布局刚刚好,不想调整。
于是,就搁置了很久。基本先手工修改首页的模版,加上一个p标签。
前几天搜索打赏插件,在Github上找到一个看上去不错的打赏插件:https://github.com/greedying/tctip
该插件是前端web插件,它在右侧停靠一个div。鼠标移进显示侧边栏,鼠标移出收回侧边栏。效果如下图:

比较喜欢这种呈现方式。灵光一现,我可以把公告融合进去。该插件使用的二维码是图片,我可以换成文本内容。
Fork该项目,着手修改。
该tctip项目有不少东西是我不需要的,例如用字符串动态生成二维码。
而且该插件使用了很多图片美化,我都将其去掉,使用CSS样式设置同等效果。
为了兼容移动端,加入了收起按钮。
同时添加不少配置项,可设置侧边栏高度,背景颜色,文本内容,公告栏等等。
有兴趣可以看我修改后的项目:https://github.com/HaddyYang/tctip
收起的效果如下:

展开显示的效果如下:


相关的详细使用说明看我的Github项目。
将相关的文件放到我Django中对应的位置。因为该插件中的公告我需要全站可见,那么需要修改最底层的模版。
打开该模版文件,添加如下代码:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
{% block content %}{#其他代码不显示#}{% endblock %}
<!--打赏-->
<link type="text/css" rel="stylesheet" href="/static/css/tctip/myRewards.css">
<script>
window.tctipConfig = {
//最上面的文字
headText: "欢迎打赏支持我 ^_^",
//侧边栏文本
siderText: "公告 & 打赏",
//侧边栏文本高度调整
siderTextTop: "-72px",
//侧边栏背景颜色
siderBgcolor: "#323d45",
//整个侧边栏的高度设置
siderTop:"118px",
//底部文字
buttomText:"了解更多",
//底部文字链接
buttomLink:"https://github.com/haddyyang/tctip",
//显示列表
list:{
notice: {name:"公告栏", className:"myR-on",
icon: "/static/img/qr_icon/tip.png",
text: "获取公告中..."
},
alipay: {name:"支付宝", desc: "用支付宝给“仕航”打赏",
icon: "/static/img/qr_icon/alipay.png",
qrimg: "/static/img/qr_code/alipay.jpg"
},
weixin: {name:"微信", desc: "用微信给“仕航”打赏",
icon: "/static/img/qr_icon/weixin.png",
qrimg: "/static/img/qr_code/weixin.jpg"
}
}
};
</script>
<script src="/static/js/tctip.min.js"></script>
</body>
</html>当然,不相干的代码都被我省略不显示,显示重点部分。
二维码也是我手机生成之后,再裁剪放进去。放进自己的二维码,打赏部分就完成了。
但公告部分还未完成。我们需要从数据库获取最新的公告内容并显示出来。这样每次更新公告内容的时候,只需要进入后台数据库,添加新的公告记录即可。
进入自己的Django项目目录,新建应用:
python manage.py startapp notice
打开该应用的models.py文件,给notice应用添加模型:
#coding:utf-8 from django.db import models class Notice(models.Model): content = models.TextField() create_time = models.DateTimeField(auto_now_add=True) def __unicode__(self): return u'%s' % (self.content) class Meta: ordering=['-create_time']
接着,打开并编辑admin.py,让该模型在Django后台管理界面中显示:
#coding:utf-8
from django.contrib import admin
from models import Notice
@admin.register(Notice)
class BlogAdmin(admin.ModelAdmin):
"""blog admin"""
list_display=('id','content','create_time')
#filter date
date_hierarchy='create_time'
ordering=('-create_time',)最后,打开settings.py文件,加入该应用并同步数据库。
处理完成之后,可以先进入后台界面添加一条记录。我这个项目是可以html代码,我新增如下公告:
春节期间可能暂时不写博客,春节之后再继续写博客。<br> <b style="color:red;">祝大家新年快乐!</b>
保存之后,刷新首页。内容没显示。因为还没修改代码获取最新公告。
由于是全站显示,我在最底层的模版使用ajax获取。后台还没相关响应方法,打开该应用的views.py文件,添加如下方法。若你最底层的模版有其他ajax代码,可以考虑合并为一个,减少向服务器请求的次数。
#coding:utf-8
from django.http import HttpResponse
from models import Notice
import json
def _get_notice():
"""get notice"""
notice = Notice.objects.all().order_by('-create_time')
if notice.count()>0:
notice = notice[0]
return notice.content + '<p style="text-align:right;margin-top:0.5em;">%s</p>' % notice.create_time.strftime("%Y-%m-%d")
else:
return u'暂无公告'
def get_notice(request):
data = {}
data['code'] = '0'
data['message'] = 'OK'
data['notice'] = _get_notice()
#返回json数据
return HttpResponse(json.dumps(data), content_type="application/json")打开urls.py文件,添加路由设置。
url(r'get_notice', get_notice, name='get_notice'),
最后,修改前端页面。添加ajax代码到最末的位置:
$.ajax({
type:"GET",
url:"{% url 'get_notice' %}",
cache:false,
dataType:'json',
success:function(data){
var notice;
if(data['code']=='0'){
notice = data['notice'];
}else{
notice='暂无公告';
};
//设置当前公告(当前显示)
$('.myRewards-text').html(notice);
//设置公告数据(切换的时候显示)
tctipConfig.list.notice.text=notice;
}
});这里需要注意最后一句代码。若不添加该句代码的话,来回切换该侧边栏的选卡会导致上一句代码的内容丢失。
用一个插件搞定公告和打赏两个功能。若你觉得不错,也可以给我打赏一下 ^_^
蓝小浅
明明提示登录成功了,然后页面那并没有显示我的用户名,而且好像评论不了,就像是没登录成功。是我浏览器问题还是咋样呢?
2017-02-23 12:46 回复