我正在使用Ajax Comments System来呈现评论和表格 而且我有一个包含头像字段的自定义用户个人资料
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, default="")
avatar = ImageField('userprofile', default='avatars/default.png', upload_to="avatars" )
我以前经常做的事:
from Profiles.models import UserProfile as Author
def BlogPost(request, slug):
post_slug = posts.objects.get(slug=slug)
author_avatar = Author.objects.get(user=User.objects.get(username=post_slug.author).id).avatar.url
args = {
'post_slug': post_slug,
'author_avatar': author_avatar,
'related': _related(post_slug.tags),
}
return render(request, "blog_post.html", args)
但是,现在我正在堆叠每个评论员头像... 即使我曾经修改或覆盖程序包,我也需要解决方案
答案 0 :(得分:0)
我第一次尝试覆盖视图并添加一些上下文,但是后来我意识到模板args位于模板标记文件中,因此我将文件复制到了项目中,并创建了一个返回化身的新标记。
@register.simple_tag
def get_avatar(Profile, comment):
return Profile.__class__.objects.get(user=comment.user.id).avatar.url
# {% get_avatar UserProfile comment %}
我完全错过了模板标签文件夹,这就是为什么我花了一些时间来解决它的原因 更新 我遇到了一些经理和归因错误,这是我最后的自定义标签 如有其他解决方案,请发布
@register.simple_tag
def get_avatar(Profile, comment):
user_id = comment.user.id
try:
return Profile.__class__.objects.get(user=user_id).user.avatar.url
except:
try:
return Profile.objects.get(user=user_id).user.avatar.url
except AttributeError:
return UserProfile.objects.get(user=user_id).avatar.url
将其作为隐藏输入放在模板中的avatar标记之前,以避免引荐来源ajax服务器错误(对我来说,此返回段代码,由于某种原因,用户头像网址将作为引荐来源发送)
@register.simple_tag
def get_url(comment):
return str(comment.content_object).replace(' ', '_')