|
吾爱游客
发表于 2020-8-13 14:18
申请id:naskry邮箱:41121019@qq.com
Gravatar是Globally Recognized Avatar的缩写,是gravatar推出的一项服务,意为“全球通用头像”。如果在Gravatar的服务器上放置了你自己的头像,那么在任何支持Gravatar的blog或者留言本上留言时,只要提供你与这个头像关联的email地址,就能够显示出你的Gravatar头像来。现在的主流博客框架,都已经使用了Gravatar全球通用头像功能,那我们使用django的朋友,也不能落后,必须也得国际化,本文就介绍在Django站点添加Gravatar全球头像功能。过程比较简单,就是使用自定义模版标签建立一个gravatar_tags.py文件,然后再html文件中引用这个模板标签,并使用他。官方开发文档:http://cn.gravatar.com/site/implement/images/django/官方文档中的代码已经不适合django2.0和python3.0以上版本,直接使用报错:报错1Unicode-objects must be encoded before hashing 大致意思是必须指定要加密的字符串的字符编码,解决方法:代码中hashlib.md5(email.lower()) 改为hashlib.md5(email.lower().encode("utf-8"))报错2module 'urllib' has no attribute 'urlencode' 这个可能就是引入文件不对,解决方法:import urllib.request,urllib.error,urllib.parse 把代码中urllib.urlencode({'d':default, 's':str(size)})改为urllib.parse.urlencode({'d':default, 's':str(size)})下面开始写代码1、建立模板标签在你的应用(app)文件夹下面templatetags文件夹中建立gravatar_tags.py文件,写入如下内容(更新后的代码)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import hashlib
import urllib.request,urllib.error,urllib.parse
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
# return only the URL of the gravatar
# TEMPLATE USE: {{ email|gravatar_url:150 }}
@register.filter
def gravatar_url(email, size=40):
default = "mm"
return "https://www.gravatar.com/avatar/%s?%s" % (hashlib.md5(email.lower().encode("utf-8")).hexdigest(), urllib.parse.urlencode({'d':default, 's':str(size)}))
# return an image tag with the gravatar
# TEMPLATE USE: {{ email|gravatar:150 }}
@register.filter
def gravatar(email, size=40):
url = gravatar_url(email, size)
return mark_safe('<img src="%s" height="%d" width="%d">' % (url, size, size))
| 这里再解释一个问题,官方示例中变量 default 为默认头像的固定 url,如果在迭代的过程中调用站点信息的话可能要耗费比较多的服务器资源;有人在 WordPress 中找到了调用官方预设头像的方法,开发者文档:https://en.gravatar.com/site/implement/images/把default = "https://example.com/static/images/defaultavatar.jpg"改为default="mm",这样就会显示默认头像。2、html文件中调用模版标签这是一个过滤器的模板标签,在项目中使用 {{ email | gravatar_url:<size> }} 来调用头像的url,我的代码如下 |
{% load gravatar_tags %} <!-- 引入gravatar头像模版标签 -->
{% for comment in comment_list %}
<img class="gravatar" src="{{ comment.email|gravatar_url:60}}" />
<a class="nickname" id="comment_name_{{ comment.pk }}" href="{{ comment.url }}" rel="external nofollow ugc" target="_blank" >{{ comment.name }}</a>
<time class="submit-date" datetime="{{ comment.created }}">{{ comment.created }}</time>
<div class="plneirong" id="comment_{{ comment.pk }}">{{ comment.body|safe }}</div>
{% empty %}
暂无评论
{% endfor %}
| 上面的代码大家主要关注下面这一行的使用方法即可(头像图片大小60*60px):
|
<img class="gravatar" src="{{ comment.email|gravatar_url:60}}" />
|
我一般办事前先搜索,当初在使用的时候也是在网上找了很多,这个版本还是比较简单的,也是官方推荐的开发方案,我也是搜到Jack's Blog的文章(https://jackyu.cn/tech/added-gravatar-to-django-project/#comment-429)之后才知道官方有开发文 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|