在Django中的templatetags中使用request.user

时间:2017-12-21 17:05:33

标签: django django-template-filters templatetags django-2.0

我正在使用Django 2.0

我有三个表notesstarredshared

备注模型

def Notes(models.Model):
    title = models.CharField()

def Starred(models.Model):
    note = models.ForeignKey(Note, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

def Shared(models.Model):
    note = models.ForeignKey(Note, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

可以与多个用户共享该笔记,并且多个用户可以为将在其/starred笔记中列出的笔记加注星标

views.py有

class SharedNotes(ListView):
    template_name = 'notes/shared.html'
    model = Shared
    context_object_name = 'shared_notes'

    def get_queryset(self):
        shared_notes = Shared.objects.filter(user=self.request.user)
        return shared_notes

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        return super(self.__class__, self).dispatch(request, *args, **kwargs)

我已经编写了一个单独的模板片段来显示备注列表,并添加*(星号),如果它是由登录用户使用

加星标
{% if note.starred_set.all %}
<span class="card-star">
    <i class="material-icons">star</i>
</span>
{% endif %}

但是这种方式明星正在与其他用户一起展示该音符已被分享,即使他们没有为该音符加星标但已被其他人加星标。

如何过滤仅加入星号的用户?

我想写一个像

一样使用的标签
{% if note.pk|starred %}
<!-- add html star code here -->
{% endif %}

并在templatetags/my_tag.py

中过滤代码
@register.filter(name='starred')
def starred(value):
    note = Note.objects.get(pk=value)
    if note is not None:
        starred_note = Starred.objects.filter(note=note, user=value['request'].user)
        if starred_note is not None:
            return True

    return True

但这会产生错误

'int' object is not subscriptable

0 个答案:

没有答案