2010-11-02 18 views
6

Je suis prêt à utiliser gravatars dans mon application django. Dans l'application cw i créé un répertoire templatetags avec l'architecture suivante:Utilisation de gravatar dans django

cw/ 
    templatetags/ 
     __init.py__ 
     gravatar.py 
    views.py 
    ... 

le gravatar.py contient

from django import template 
import urllib, hashlib 

register = template.Library() 

class GravatarUrlNode(template.Node): 
def __init__(self, email): 
    self.email = template.Variable(email) 

def render(self, context): 
    try: 
     email = self.email.resolve(context) 
    except template.VariableDoesNotExist: 
     return '' 

    default = "/site_media/img/defaultavatar.jpg" 
    size = 40 

    gravatar_url = "http://www.gravatar.com/avatar/" + hashlib.md5(email.lower()).hexdigest() + "?" 
    gravatar_url += urllib.urlencode({'d':default, 's':str(size)}) 

    return gravatar_url 

@register.tag 
def gravatar_url(parser, token): 
    try: 
     tag_name, email = token.split_contents() 

    except ValueError: 
     raise template.TemplateSyntaxError, "%r tag requires a single argument" % token.contents.split()[0] 

    return GravatarUrlNode(email) 

et dans l'un des modèles de cw i essayé:

{% load gravatar %} 

mais je reçois:

'gravatar' is not a valid tag library: Template library gravatar not found, tried django.templatetags.gravatar,django.contrib.admin.templatetags.gravatar` 

Je lance django 1.2.1 Python 2.6 et dans mon settings.py:

TEMPLATE_LOADERS = ( 
'django.template.loaders.filesystem.load_template_source', 
'django.template.loaders.app_directories.load_template_source', 
'django.template.loaders.eggs.load_template_source', 
) 
TEMPLATE_CONTEXT_PROCESSORS = ( 
"django.contrib.auth.context_processors.auth", 
"django.core.context_processors.debug", 
"django.core.context_processors.auth", 
"django.core.context_processors.request", 
"django.core.context_processors.i18n", 
"django.core.context_processors.media", 
"django.contrib.messages.context_processors.messages", 
) 

EDIT: J'ai trouvé cette autre mise en œuvre qui est plus propre: http://tomatohater.com/2008/08/16/implementing-gravatar-django/

+0

Avez-vous ajouté cw à vos applications installées? – zsquare

+0

@zsquare: oui je l'ai fait – Mermoz

+0

+ pour le lien! Merci! – bharal

Répondre

2

donc la solution que j'ai trouvé est de part les modèles Gravatar parmi toutes mes applications en créant un répertoire lib:

proj/ 
    __init__.py 
    lib/ 
     __init__.py 
     templatetags/ 
      __init.py__ 
      common_tags.py 

et en ajoutant lib à mes applications installées

5

Votre problème est ici:

cw/ 
    templatetags/ 
     __init.py__ <<< 
     gravatar.py 
    views.py 
    ... 

Il devrait être __init__.py pas __init.py__