将参数从 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 - 将参数从模板传递到 models.py 的函数
Django + Angular:如何将 angularjs $http 数据或参数发送到 django 并在 django 中解释?