13

好的,我已经尝试搜索这个很长一段时间了。我不能将 args 和 kwargs 传递给 django 应用程序中的视图吗?我是否必须独立定义每个关键字参数?

例如,

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

在调用视图时,

response = someview(request,locals())

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

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

有什么理由吗?

4

3 回答 3

14

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

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

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

response = view(request, **my_kwargs)

因此,如果locals()是关键字参数,则传入**locals(). 我个人不会使用隐含的东西,比如locals()

于 2012-12-20T17:57:23.907 回答
5

问题是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

于 2012-12-20T17:59:41.750 回答
4

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

例如:

    def any_funtion(*args, **kwargs):
         //some code

    any_function(1,arg1="hey",arg2="bro")

其中,第一个是简单(非关键字)参数,另外两个是关键字参数;

于 2020-05-19T10:59:35.840 回答