пользовательский тег аватара django - PullRequest
0 голосов
/ 18 августа 2010

Мой сайт достаточно визуален, и я хотел бы использовать аватары пользователей по всему сайту, поэтому я считаю, что лучше всего написать собственный шаблонный тег.

My UserProfile связано с User и имеет profile_pic.

Я использую django-imagekit, и поэтому в игру вступает ImageModel

class UserProfile(ImageModel):  
    profile_pic = models.ImageField(storage=cloudfiles_storage,
                                    upload_to='avatars',
                                    default='avatar-blank.jpg')`

На моей главной странице я размещаю новости и информацию, которую люди публикуют, называя все мои последние сообщения. и каждый пользователь связан с сообщением.

поэтому в своих профилях я создал папку templatetags, а также файл с именем myavatar_tags.py

в моем avatar_tags.py я отображаю следующее

from accounts.models import UserProfile  
from imagekit.models import ImageModel  
from django import template 

register = template.Library()

@register.simple_tag  
def my_avatar(request, user):  
    avatar = UserProfile.objects.get(pk=user.id)

my_avatar = register.tag(my_avatar)

Теперь это мой первый тег, который я пишу, и я не уверен, каким способом это действительно сделать.

1 Ответ

1 голос
/ 18 августа 2010

Я думаю, вы хотите тег включения .

@register.inclusion_tag('avatar.html')
def my_avatar(user):
  return {'user': UserProfile.objects.get(pk = user.id) }

Затем в шаблоне с именем avatar.html напишите шаблон для своего тега как обычно - вы, вероятно, захотите что-то вроде:

<img src="{{ user.profile_pic.url }}" alt="{{ user.get_name_somehow }}" />

Затем вы можете использовать этот тег следующим образом - учитывая представление, которое отображает этот шаблон, передавая объект User через имя my_user, и вы поместили код Python выше в файл с именем foobar.py.

{% load foobar %}

{% my_avatar my_user %}
...