【问题标题】:django avatar custom template tagdjango头像自定义模板标签
【发布时间】:2011-03-31 09:41:04
【问题描述】:

我的网站非常直观,我想利用整个网站的用户头像,所以我认为编写自定义模板标签是最好的方法。

我的UserProfileUser 相关联并且有一个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)

现在这是我正在编写的第一个标签,我不确定该用哪种方式真正使用它。

【问题讨论】:

    标签: django django-templates django-imagekit django-custom-tags


    【解决方案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 }}" />
    

    然后你可以像这样使用这个标签 - 给定一个呈现这个模板的视图,通过名称 my_user 传递一个 User 对象,并且你已经将上面的 Python 代码放在一个名为 foobar.py 的文件中。

    {% load foobar %}
    
    {% my_avatar my_user %}
    

    【讨论】:

    • 嗯,似乎无法让它工作。在我的首页上,我使用以下语句 {% for post in posts %} 呈现帖子,该语句调用我的帖子模型,在我的帖子模型中我有一个用户字段,那么这一切仍然适用吗?
    • 我已经让它工作得非常顺利。我有一个问题。我有一个消息模型,它有一个发送者和一个接收者。当我通过收件人时,它起作用了。当我通过发件人时,它失败了,虽然它们都是用户的foreignKey字段......知道吗?
    猜你喜欢
    • 2021-07-13
    • 2015-01-20
    • 2012-03-15
    • 2015-12-17
    • 2011-10-05
    • 1970-01-01
    • 2010-11-15
    • 2011-12-15
    相关资源
    最近更新 更多