2010-05-23 88 views
2

錯誤可以在這裏看到:http://djaffry.selfip.com:8080/Django的接受GET參數

我想索引頁接受參數,無論是

mysite.com/search/param_here 

mysite.com/?search=param_here 

我有這樣的我URL模式,但我無法讓它工作。有什麼建議麼?

urlpatterns = patterns('', 
     (r'^$/(?P<tag>\w+)', 'twingle.search.views.index'), 
    ) 

回答

21

首先,你在url模式中的正則表達式是錯誤的。

r'^$/(?P<tag>\w+)' 

它說,以匹配一切從

  • ^線
  • $到行
  • 具有被後由文字和數字的命名標籤模式的結束的開始行結束

通常在一行結束後來另一行或EOF不滿足(除非你使用多行正則表達式,你不需要這些)。

線到底應該在標籤後:

r'^/(?P<tag>\w+)$' 

使用查詢字符串

Query strings are not parsed by url reslover.

因此,如果你在格式有網址:

http://mysite.com/?query=param_here 

將匹配:

(r'^$', 'twingle.search.views.index') 

在這種情況下,您可以訪問query字符串中的觀點,像這樣:

request.GET.get('query', '') 

沒有查詢字符串

mysite.com/search/param_here 

將匹配:

(r'^search/(?P<query>\w+)$', 'twingle.search.views.index'), 

凡匹配\w(您應該更改此套件以滿足您的需求)的所有內容都將與請求索引視圖函數一起傳遞,作爲名爲query的參數。

兩個

:您可以使用URL模式,像這樣:

urlpatterns = patterns('twingle.search.views', 
    url(r'^$', 'index'), 
    url(r'^search/(?P<query>\w+)$', 'index'), 
) 

在這個例子中的觀點會是這個樣子:

def index(request, query=None) 
    if not query: 
     query = request.GET.get('query', '') 
    # do stuff with `query` string 
+0

我正在使用錯誤'url(r'^ search /(?P \ w +)$','index')',語法無效(urls.py,第9行) 有什麼想法爲什麼? – tipu 2010-05-23 11:50:43

+0

如果你複製/粘貼了兩個模式的最後一個urlpatterns示例代碼,似乎我在第一個url模式後忘記了一個逗號。我現在已經修好了。 – 2010-05-23 12:02:38

+0

我還編輯了urlpatterns(更名爲''到''),以便更容易在視圖中使用並添加了一個視圖示例。 – 2010-05-23 12:29:53