2010-11-02 6 views
6

estoy dispuesto a usar gravatars en mi aplicación django. En la aplicación cw he creado un directorio templatetags con la siguiente arquitectura:Usando gravatar en django

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

la gravatar.py contiene

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) 

y en una de las plantillas de cw Traté:

{% load gravatar %} 

pero me sale:

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

corro Django 1.2.1 Python 2.6 y en mi 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: He encontrado esta otra aplicación que es más limpio: http://tomatohater.com/2008/08/16/implementing-gravatar-django/

+0

¿Ha añadido cw a sus aplicaciones instaladas? – zsquare

+0

@zsquare: sí, lo hice – Mermoz

+0

+ para el enlace! ¡Gracias! – bharal

Respuesta

2

Así que la solución que he encontrado es cuota de las plantillas gravatar entre todas mis aplicaciones mediante la creación de un directorio lib:

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

y lib añadir a mis aplicaciones instaladas

5

Su problema está aquí:

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

Cabe __init__.py no __init.py__