2015-11-05 22 views
2

是否可以定義Django urlpattern,它可以獲取任意數量的相同類型參數並將它們傳遞給視圖?具有無限參數數量的Django urlpattern

可以說我想創建一個頁面,它從url獲取數字列表並將它們相加。因此,這些將是有效的URL:

/sum/10/99/12/ 
/sum/1/2/3/4/5/6/7/8/9/ 
/sum/3/ 

我想這個觀點看起來是這樣的:

def sum_view(request, *args): 
    return render(request, 'sum.html', {'result': sum(args)}) 

問題是應該怎麼URLPATTERN是什麼樣子?也許是這樣的:

url(r'^sum/((\d+)/)+$', views.sum_view) 

但這樣觀點僅得到最後一個號碼重複兩次:args == ('1/', '1')。什麼是正確的正則表達式來獲取所有通過視圖的數字?

+1

爲什麼你不通過GET格式的參數? - >'/ sum /?nums = [1,2,3,4,5,6,7]' – Gocht

回答

4

您可以捕獲單個參數,例如'1/2/3/4/5/6/7/8/9/'

url(r'^sum/(?P<numbers>[\d/]+)$', views.sum_view) 

在視圖中拆分列表。

def sum_view(request, numbers): 
    processed_numbers = [int(x) for x in number.split('/') if x] 
    ... 
1

Django的URL模式是基於Python的正則表達式,所以沒有從重複組捕獲所有數據的方式。請查看question以獲取解釋。

你將不得不自己拆分和處理它們(如@Alasdair建議)。