与反向函数和kwargs有关的问题

Ram*_*ttu 4 python django

要通过名称或View_name反向查找URL,我们将在下面的视图中使用反向函数

reverse("calendarviewurl2", kwargs={"year":theyear,"month":themonth})
Run Code Online (Sandbox Code Playgroud)

和反向功能签名如下

http://code.djangoproject.com/browser/django/trunk/django/core/urlresolvers.py

def reverse(self, lookup_view, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我的问题与kwargs有关

当我们想要将字典作为关键字参数发送时,我们应该使用下面的语法 片段1

 kwargs={"year":2009,"month":9}
   reverse("name",**kwargs)
Run Code Online (Sandbox Code Playgroud)

而不是下面的代码
片段2

  reverse("name",kwargs={"year":2009,"month":9})
Run Code Online (Sandbox Code Playgroud)

所以我的问题是

  1. snippet1和snippet2是否相同?(我觉得他们不一样)
  2. 在反向功能的情况下,只有片段2工作在片段1不能正常工作的地方.为什么会这样?(即使发送字典的正确方法是使用snippet1中提到的语法.)

Joc*_*zel 9

你没看签名,

def reverse(viewname, urlconf=None, args=None, kwargs=None, 
                      prefix=None, current_app=None):
Run Code Online (Sandbox Code Playgroud)

完全没有**kwargs.

kwargs={"year":2009,"month":9}
reverse("name",**kwargs)
Run Code Online (Sandbox Code Playgroud)

手段

reverse("name", year=2009, month=9)
Run Code Online (Sandbox Code Playgroud)

这完全不同于

reverse("name",kwargs={"year":2009,"month":9})
Run Code Online (Sandbox Code Playgroud)

当一个函数确实占用时**kwargs,两种调用方式都是相同的.但事实并非如此.反向看起来像这样**kwargs:

def reverse(viewname, urlconf=None, prefix=None, 
                      current_app=None, *args, **kwargs):
Run Code Online (Sandbox Code Playgroud)