简单的 gravatar 未在 django 模板中显示

Posted

技术标签:

【中文标题】简单的 gravatar 未在 django 模板中显示【英文标题】:simple gravatar not displaying in django template 【发布时间】:2012-05-09 16:01:30 【问题描述】:

我参考了这个网站: http://tomatohater.com/2008/08/16/implementing-gravatar-django/

我有一个配置文件应用程序,其中包含带有 mytags.py 的 templatetags 目录。

mytags.py 的内容

import urllib, hashlib
from django import template

register = template.Library()

@register.inclusion_tag('templatetags/gravatar.html')
def show_gravatar(email, size=48):
    default = "http://www.mysite.com/media/images/no-avatar.gif"

    url = "http://www.gravatar.com/avatar.php?"
    url += urllib.urlencode(
        'gravatar_id': hashlib.md5(email).hexdigest(),
        'default': default,
        'size': str(size)
    )
    return 'gravatar': 'url': url, 'size': size

模板/templatetags/gravatar.html的内容

<img src=" gravatar.url "   border="0" />

标签在profile.html模板文件中使用。

但是头像没有显示在profile.html中。但是来源显示

<div class="gravatar">
<a href="">
<img src="http://www.gravatar.com/avatar.php?default=http%3A%2F%2Fwww.mysite.com%2Fmedia%2Fimages%2Fno-avatar.gif&amp;size=48&amp;gravatar_id=5d1b0b64499475516bd9c051aa7f3560"   border="0" />
</a></div>

【问题讨论】:

用github.com/nvie/django-gravatar 尝试过,但它加载的是备用图片而不是真正的头像。 终于让它与 github.com/nvie/django-gravatar 一起工作。 【参考方案1】:

参考the doc,始终降低并删除电子邮件。 此外,请使用 'http://www.gravatar.com/avatar/'+hash 而不是旧格式。 然后代码看起来像

url = 'http://www.gravatar.com/avatar/%s?%s" % (
    hashlib.md5(email.strip().lower()).hexdigest(),  
    urllib.urlencode('default': default, 'size': size))

对于您的代码,电子邮件哈希很可能与任何内容都不匹配。我使用您代码中的格式尝试了我的头像,效果很好。 Has the email been registered?

【讨论】:

【参考方案2】:

当我尝试使用图片 URL 时,gravatar 无法识别经过哈希处理的电子邮件地址,因此它会重定向到您提供的备用图片:http://www.mysite.com/media/images/no-avatar.gif

获得回退是否正确?或者你期待一个真正的 gravatar 吗?如果是这样,错误就在哈希中。

mysite.com 显然不是您的站点。但是,您实际上使用了正确的 URL 吗?

硬编码 URL:您使用的主机名是否正确?您的settings.py 中的MEDIA_URL 正确吗?

【讨论】:

我没有设置后备图像。我预计 gravatar 会出现 试过 github.com/nvie/django-gravatar 但它也加载了备用图片 - 大蓝色 G 确实设置了后备图片。这是您图片网址中的“默认”。如果我把你的图片的网址放在我的浏览器中,这就是显示的那个。 (并且 URL 失败了,这就解释了为什么您在页面中看不到 gravatar 图像)。建议:从你的网址中删除“默认”,你至少会看到 gravatar 自己的默认图像。之后,你可以担心 gravatar_id。【参考方案3】:
<img src=" gravatar.url|safe "   border="0" />

Safe 模板过滤器防止自动转义&amp;amp;

【讨论】:

我测试了你的代码并被重定向到default 404的url。没关系,因为我没有头像

以上是关于简单的 gravatar 未在 django 模板中显示的主要内容,如果未能解决你的问题,请参考以下文章

基本模板未在 Django 中加载

模板未在 Django 提供的 Vue 中呈现 [重复]

重定向后表单未在模板中呈现(django)

Django外键未在模板中呈现相关模型数据

Django 联系电子邮件表单未在模板 home.html 中呈现/显示

其他模板未在我的基本模板中继承 FOR LOOP