我想在 Django 上使用 Gravatar:
import hashlib
import urllib
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 = "https://example.com/static/images/defaultavatar.jpg"
return "https://www.gravatar.com/avatar/%s?%s" % (
hashlib.md5(email.lower()).hexdigest(), urllib.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))
Run Code Online (Sandbox Code Playgroud)
我正在使用此链接: Django Gravatar
我将此代码放在一个名为“grav_tag”的文件中并加载:
{% load grav_tag %}
Run Code Online (Sandbox Code Playgroud)
我的模板:
{{ user.email|gravatar:150 }}
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误
Unicode-objects must be encoded before hashing
Run Code Online (Sandbox Code Playgroud)
user.email是一个 Unicode 字符串,而哈希函数只能对字节进行操作。因此,您需要根据一些 Unicode 字符编码将字符串转换(即编码)为一系列字节。
从历史上看,电子邮件地址仅限于 ASCII,但现在它们也可以是 UTF-8。的的gravatar文件中没有提到的编码,因此,如果他们支持UTF-8的电子邮件地址目前还不清楚。
简单的答案就是使用email.lower().encode("utf-8"). 由于 ASCII 在整个 ASCII 范围内与 UTF-8 相同,因此这应该适用于 Gravatar 支持的所有电子邮件地址。
| 归档时间: |
|
| 查看次数: |
1457 次 |
| 最近记录: |