django意见中的args和kwargs

时间:2012-12-20 17:41:12

标签: python django django-views args kwargs

好的,我已经尝试了很长一段时间。我不能将args和kwargs传递到django app中的视图吗?我是否必须单独定义每个关键字参数?

例如,

#views.py
def someview(request, *args, **kwargs):
...

在调用视图时,

response = someview(request,locals())

我似乎无法做到这一点。 相反,我必须这样做:

#views.py
def someview(request, somekey = None):
...

有什么原因吗?

3 个答案:

答案 0 :(得分:8)

如果要将关键字参数传递到视图中,则正确的语法为:

def view(request, *args, **kwargs):
    pass

my_kwargs = dict(
    hello='world',
    star='wars'
)

response = view(request, **my_kwargs)

因此,如果locals()是关键字参数,则传入**locals()。我个人不会使用像locals()

这样隐含的东西

答案 1 :(得分:3)

问题是locals()返回字典。如果您想使用**kwargs,则需要解压缩locals

response = someview(request,**locals())

当您像response = someview(request,locals())一样使用它时,实际上是将字典作为参数传递:

response = someview(request, {'a': 1, 'b': 2, ..})

但是当你使用**locals()时,你正在使用它:

response = someview(request, a=1, b=2, ..})

您可能需要查看Unpacking Argument Lists

答案 2 :(得分:3)

* args和** kwargs用于将可变数量的参数传递给函数。单星号用于非关键字参数,双星号用于关键字参数。

例如:

someOtherFile.js

在此,第一个是简单的(非关键字)参数,另外两个是关键字参数;