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

时间:2009-09-30 10:27:07

标签: python django

要通过名称或View_name反向查找网址,我们将在下面的视图中使用反向功能

reverse("calendarviewurl2", kwargs={"year":theyear,"month":themonth})

和反向函数签名如下

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

def reverse(self, lookup_view, *args, **kwargs)

我的问题与kwargs有关

当我们想要将字典作为关键字参数发送时,我们应该使用以下语法   摘录1

 kwargs={"year":2009,"month":9}
   reverse("name",**kwargs)

而不是下面的代码
摘录2

  reverse("name",kwargs={"year":2009,"month":9})

所以我的问题是

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

1 个答案:

答案 0 :(得分:9)

你没看过signature

def reverse(viewname, urlconf=None, args=None, kwargs=None, 
                      prefix=None, current_app=None):

根本不需要**kwargs

kwargs={"year":2009,"month":9}
reverse("name",**kwargs)

表示

reverse("name", year=2009, month=9)

完全不同
reverse("name",kwargs={"year":2009,"month":9})

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

def reverse(viewname, urlconf=None, prefix=None, 
                      current_app=None, *args, **kwargs):