Django:如何访问当前登录用户&x27;javascript中的id?
我在视图集中定义了一个get_queryset方法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
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});