Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:如何访问当前登录用户&x27;javascript中的id?_Javascript_Python_Django_Django Rest Framework - Fatal编程技术网

Django:如何访问当前登录用户&x27;javascript中的id?

Django:如何访问当前登录用户&x27;javascript中的id?,javascript,python,django,django-rest-framework,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

我在视图集中定义了一个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(“作者id”).value

如果javascript在模板文件中,您可以像以下任何方式访问它:

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

{% endfor %}

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

var id = {{ author.id }}

从Django 2.1开始,专门为此用例引入了一个新的内置模板标记:json_脚本

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

无需设置任何上下文变量,因为请求已包含在每个视图中。用户:

template.html

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

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

我认为您可以将用户id添加到context@JonasGrumann你能解释一下上下文是什么意思吗?在第一个例子中,他在上下文中添加了一个数字,因此它将在模板中可用:在一个模板中同时使用get_queryset和get_context_数据方法可以吗ReadOnlyModelViewSet@JonasGrumann非常感谢。我也在尝试,但是我的js文件不在我的模板中,我已经包含了它。如果我的js不在我的模板中怎么办。它是一个单独的文件,我已将其包含在我的模板中。thnank you@stefanoCreate一个可以传递id的函数,然后您可以调用您的函数({author.id});