如何在没有明确传入过滤器的情况下将当前用户放入过滤器中?

时间:2009-12-08 12:37:51

标签: django

如果该用户名与当前用户的用户名匹配,我想用最简单的方式显示“你”而不是用户名。

理想情况下是这样的过滤器(其中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

3 个答案:

答案 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的建议将用户提供给过滤器,但这是另一种选择。