django视图中的参数和kwargs

问题描述 投票:9回答:3

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

例如,

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

并且在调用视图时,

response = someview(request,locals())

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

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

任何原因吗?

python django django-views args kwargs
3个回答
12
投票

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

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

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

response = view(request, **my_kwargs)

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

的隐式内容

4
投票

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


0
投票

我对为什么一开始使用它们感到困惑。

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

例如,

def any_funtion(* args,** kwargs)://一些代码

any_function(1,arg1 =“ hey”,arg2 =“ bro”)

在此,第一个是简单的(非关键字)参数,第二个和第三个是关键字参数;

© www.soinside.com 2019 - 2024. All rights reserved.