Django:如何在javascript中访问当前登录用户的ID?

时间:2016-01-11 10:30:39

标签: javascript python django django-rest-framework

我在视图集中定义了一个get_queryset方法。

class BooksViewSet(ReadOnlyModelViewSet):
    serializer_class = BooksSerializer
    permission_classes = (IsAuthorizedToAccess, )

    def get_queryset(self):
        queryset = Books.objects.all();
        return queryset

使用javascript我想在一侧显示当前用户的书籍,在右侧显示其他所有用户的书籍。 我完成了所有代码但无法访问我的js文件中的当前用户ID。

if(auther.id == "current user id")
{
}

我想要像这样访问用户ID。 对于我所做的所有搜索,我知道将此用户ID添加为隐藏字段或传递此ID。但我不能因为该方法只允许返回queryset对象。

任何人都可以帮助我理解这一点。

编辑:我的解决方案

在我的视图中,我定义了get_context_data方法。

 def get_context_data(self, *args, **kwargs):
    ctx = super(class_name, self).get_context_data(*args, **kwargs)
    ctx["author_id"]=self.request.user.id
    return ctx

在我的模板中,我定义了一个隐藏字段:

<input type="hidden" id="userId" value={{author_id}}>

在我的JS中:

var x = document.getElementById(“author_id”)。value;

3 个答案:

答案 0 :(得分:5)

从Django 2.1开始,专门针对此用例引入了一个新的内置模板标记:json_script。

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#json-script

新标签将安全地序列化模板值并防止XSS。

不必设置任何上下文变量,因为request.user已经包含在每个视图中

template.html

{{ request.user.id|json_script:"user_id" }}

script.js

const user_id = JSON.parse(document.getElementById('user_id').textContent);

答案 1 :(得分:1)

您也可以使用模板标签。喜欢{{author.id}} 您还可以将值分配给javascript变量,然后使用它

var id = {{ author.id }}

答案 2 :(得分:0)

如果javascript在您的模板文件中,您可以像以下任何其他文件一样访问它:

{% for author in authors %}
    if('{{author.id}}' == "current user id")
    {
    }

{% endfor %}