django意见中的args和kwargs

Sid*_*idd 9 python django args django-views kwargs

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

例如,

#views.py
def someview(request, *args, **kwargs):
...
Run Code Online (Sandbox Code Playgroud)

在调用视图时,

response = someview(request,locals())
Run Code Online (Sandbox Code Playgroud)

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

#views.py
def someview(request, somekey = None):
...
Run Code Online (Sandbox Code Playgroud)

有什么原因吗?

Hed*_*ide 10

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

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

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

response = view(request, **my_kwargs)
Run Code Online (Sandbox Code Playgroud)

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


Ris*_*bra 6

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

例如:

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

    any_function(1,arg1="hey",arg2="bro")
Run Code Online (Sandbox Code Playgroud)

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


Cés*_*sar 5

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

response = someview(request,**locals())
Run Code Online (Sandbox Code Playgroud)

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

response = someview(request, {'a': 1, 'b': 2, ..})
Run Code Online (Sandbox Code Playgroud)

但是当你使用时,**locals()你是这样使用它的:

response = someview(request, a=1, b=2, ..})
Run Code Online (Sandbox Code Playgroud)

你可能想看看解包参数列表