我的网站非常直观,我想在整个网站上使用用户头像,所以我认为编写自定义模板标记是最好的方法。
我的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)
现在这是我写的第一个标签,我不确定采用哪种方式。
答案 0 :(得分:1)
我想你想要一个inclusion tag。
@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 %}