2009-09-30 85 views
4

爲了扭轉通過名稱或VIEW_NAME手段查找的網址,我們將使用反轉功能的觀點類似下面扭轉功能有關,問題kwargs

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提到的語法。)

回答

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): 
+0

感謝您的澄清。 我錯過了文件中的第二個反轉定義 http://code.djangoproject.com/browser/django/trunk/django/core/urlresolvers.py 我剛剛看到第一個反向definaion試圖很難知道原因。 – 2009-09-30 10:53:43