将参数从 Angularjs 传递给 Django

Posted

技术标签:

【中文标题】将参数从 Angularjs 传递给 Django【英文标题】:Passing params from Angularjs to Django 【发布时间】:2014-12-19 16:09:37 【问题描述】:

我在视图中看到了一些意想不到的东西(调试器模式),我不确定我是在前端还是后端出错:

(Pdb) request.QUERY_PARAMS
<QueryDict: u'types': [u'Component', u'Core']>
(Pdb) request.QUERY_PARAMS['types']
u'Core'

我希望得到[u'Component', u'Core'],而不仅仅是一个元素。

在前端,我像这样使用 Restangular:

var params = 
    types: ['Component', 'Core']
;
Restangular.all('search').getList(params)...

后端代码就在 DRF 查询集中:

def get_queryset(self, *args, **kwargs):
    request = self.request
    import pdb; pdb.set_trace()
    ...

我需要对字符串列表做一些特殊的编码,还是其他一些问题?

【问题讨论】:

【参考方案1】:

您需要使用request.QUERY_PARAMS.getlist('types'),因为request.QUERY_PARAMS AKA request.GET 是一个django QueryDict。在此处查看文档:https://docs.djangoproject.com/en/dev/ref/request-response/#querydict-objects

【讨论】:

有点相关的问题:如果我通过[1,2,3],整数会转换为字符串,有没有办法避免这种情况? @WBC Django 无法知道查询字符串中提交的值的类型,因此它们将始终是字符串。您需要执行[int(q) for q in request.QUERY_PARAMS.getlist('types')] 之类的操作。您可以创建一个 Django 表单并使用 TypedMultipleChoiceField 但这相当于同一件事。 非常感谢...既然您提到了列表理解,那么 [int(q) for q in list]map(lambda x: int(x), list) 之间是否存在性能差异? 没什么区别。通常最好采用更惯用的方法,即列表理解

以上是关于将参数从 Angularjs 传递给 Django的主要内容,如果未能解决你的问题,请参考以下文章

Django - 将模型名称从 url 传递给视图

无法将参数从模板传递到 Django 视图

django - 将参数从模板传递到 models.py 的函数

如何将数据从angularjs传递给spring控制器

Django + Angular:如何将 angularjs $http 数据或参数发送到 django 并在 django 中解释?

您可以在创建时将参数传递给 AngularJS 控制器吗?