如果该用户名与当前用户的用户名匹配,我想用最简单的方式显示“你”而不是用户名。
理想情况下是这样的过滤器(其中object.owner是指向auth.User的ForeignKey字段)
{{ object.owner|username_or_you }}
或拦截链中较高层的方法 - 所以我输出user.username的任何地方都会输出“你”或有问题的实际用户名。
目前我有这个:
{{ object.owner|username_or_you,request.user }}
过滤器如下所示:
def username_or_you(user, request_user):
if user == request_user:
return "You"
else:
return user
答案 0 :(得分:0)
我想对这个问题发表评论,但我目前缺乏这样做的声誉,唉,我的答复是“回答表”:
你到底是什么问题?我问这个,因为你已经为一个漂亮的小自定义模板过滤器提供了样板代码。您可以在http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters了解自定义过滤器。您需要做的就是将代码包装到过滤器类中,并将其导入要使用过滤器的模板中。 :)
答案 1 :(得分:0)
我认为你的问题是你在过滤器中使用的是逗号而不是冒号。
所以......你的代码:
{{ object.owner|username_or_you,request.user }}
应该是:
{{ object.owner|username_or_you:request.user }}
然后当前用户将作为第二个参数传递给过滤器
答案 2 :(得分:0)
您可以使用包含标记
Django | Custom template tags and filters
您可以使用takes_context=True
注册,然后使用context['request'].user
就个人而言,我只会按照Jim的建议将用户提供给过滤器,但这是另一种选择。