【问题标题】:args and kwargs in django viewsdjango 视图中的 args 和 kwargs
【发布时间】:2012-12-08 07:04:50
【问题描述】:

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

例如,

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

在调用视图时,

response = someview(request,locals())

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

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

有什么原因吗?

【问题讨论】:

  • *args 和 **kwargs 在您的每个视图中都不是强制性的,请求对象是
  • 对不起,这不是我想要的。我已经编辑了这个问题。希望现在更清楚了。
  • 您看到的结果是什么?错误信息?

标签: python django django-views args keyword-argument


【解决方案1】:

如果你想传递给视图的关键字参数,正确的语法是:

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

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

response = view(request, **my_kwargs)

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

这样的隐含内容

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      例如:

          def any_funtion(*args, **kwargs):
               //some code
      
          any_function(1,arg1="hey",arg2="bro")
      

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

      【讨论】:

      • 嘿瑞诗!您可以在答案中使用代码格式以使其更具可读性吗?只需在您的代码后面加上三个`符号和三个`符号! :)
      猜你喜欢
      • 1970-01-01
      • 2020-09-16
      • 2017-01-28
      • 2018-01-11
      • 2021-07-26
      • 2022-09-22
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多