发现欧必杰(http://www.ooobj.com/blog)的标签远远比我多,用li列表显示已经不可容忍,所以我决定花点时间把标签的显示更新一下,最新的效果如http://zhlwish.appspot.com左侧的标签云。
思路很简单,就是为每个标签随机生成一种颜色(当然要考虑到如果生成的背景色,就需要再生成一次),然后根据引用这个标签的日志数按比例生成12-15号之间的字体。具体的代码如下:
这里偷了个懒,我这里的标签云是白色背景,就直接硬编码了,最好是作为列表参数传入。
这里遇到了一个问题就是python的除法问题,python有两种除法,即所谓的true除法和floor除法,有兴趣的朋友google一下啦。我就不重复占用网络资源了。
import random
def rand_color():
hex_char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f')
color = "#"
for i in range(6):
color += random.choice(hex_char)
if color == "#ffffff":
return rand_color()
else:
return color
tags = Tag.all() #返回所有的标签
tag_weighing = [len(tag.diaries) for tag in tags]
max_w = max(tag_weighing)
min_w = min(tag_weighing)
weighing = float(3/((max_w - min_w) + 1)) #计算权重
tag_strs = [];
for tag in tags:
font_size = str(weighing * len(tag.diaries) + 12) + "px";
color = rand_color()
tag_strs.append("<a href='/blog/tag/" + str(tag.key()) + "/' style='color:" + color + ";font-size:" + font_size + ";'>" + tag.name + "</a> ")