Пользовательский тег шаблона аватара django

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

мой 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 ответ

Решение

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

@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 %}
Другие вопросы по тегам