sid*_*qui 7 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
Run Code Online (Sandbox Code Playgroud)
使用javascript,我想在一侧显示当前用户的书籍,在右侧显示其他所有用户的书籍。我完成了所有代码,但无法访问我的 js 文件中的当前用户 ID。
if(auther.id == "current user id")
{
}
Run Code Online (Sandbox Code Playgroud)
我想像这样访问用户 ID。对于我所做的所有搜索,我知道如何将此用户 ID 添加为隐藏字段或传递此 ID。但我不能,因为该方法只允许返回查询集对象。
任何人都可以帮助我理解这一点。
编辑:我的解决方案
在我看来,我定义了 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
Run Code Online (Sandbox Code Playgroud)
在我的模板中,我定义了一个隐藏字段:
<input type="hidden" id="userId" value={{author_id}}>
Run Code Online (Sandbox Code Playgroud)
在我的 JS 中:
var x= document.getElementById("author_id").value;
Sch*_*nge 13
从 Django 2.1 开始,专门为此用例引入了一个新的内置模板标记:json_script。
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#json-script
新标签将安全地序列化模板值并防止 XSS。
没有必要设置任何上下文变量,因为 request.user 已经包含在每个视图中:
模板.html
{{ request.user.id|json_script:"user_id" }}
Run Code Online (Sandbox Code Playgroud)
脚本.js
const user_id = JSON.parse(document.getElementById('user_id').textContent);
Run Code Online (Sandbox Code Playgroud)
您也可以使用模板标签。与 {{author.id}} 类似,您也可以将值分配给 javascript 变量,然后使用它
var id = {{ author.id }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6838 次 |
| 最近记录: |