2017-06-13 83 views
0

我在Django URL-View系統中遇到問題。我一直在嘗試了一個觀點:使用具有多個參數的URL的Django- TypeError

#views.py... 
def IsolatedForm(request, lat, lng, slug): 
    if not request.user.is_authenticated(): 
     return redirect('login') 
    chosen_form = Form.objects.filter(slug=slug) 
    return render(request, 'polls/isolatedform.html', {'chosen_form':chosen_form, 'lng': lng, 'lat': lat}) 

我與花費幾花車(座標值)和料塊的URL模式相關聯的:

#urls.py... 
url(r'^testing/(-?\d+\.\d+),(-?\d+\.\d+)/(?P<slug>.*)/$', views.IsolatedForm, name='isolatedform'), 

當我嘗試這用,例如,(與應用程序名稱被輪詢)URL模式:

輪詢/檢測/ 1.0,-1.0/postchaos/

(其中 「postchaos」 是對應於現有表單的示例蛞蝓)獲得:在/polls/testing/1.0,-1.0/postchaos/ IsolatedForm

類型錯誤()採用 正好4個參數( 2 given)

我不能意識到實際問題是什麼,因爲我嘗試過的URL包含預期的數字和預期的slug。 任何幫助,將不勝感激。

+0

您正在使用LAT LNG鑑於作爲參數,但你沒有從URL –

回答

0

同時我發現了幾個其他的答案在這裏堆棧溢出,使得它能夠解決的問題,同時也制約了緯度/經度參數花車由逗號分隔:

命名浮動樣的論點:https://stackoverflow.com/a/1128740/6857994

而對於蛞蝓一個更好的正則表達式:https://stackoverflow.com/a/15080420/6857994

下面是工作模式:

url(r'^testing/(?P<lat>[+-]?(\d*\.)?\d+),(?P<lng>[+-]?(\d*\.)?\d+)/(?P<slug>[\w-]+)/$', views.IsolatedForm, name='isolatedform'), 

此外,儘管@jgmh的答案沒有解決不保留我的約束的問題,但提供有關命名值的提示很有幫助。由於

編輯:正則表達式的變化,允許簽署漂浮

1

您必須命名變量。 URL無法理解「lat」和「lng」變量,所以它們不能傳遞給視圖。 嘗試糾正它們,例如:

url(r'^testing/(?P<lat>\w+)/(?P<lng>\w+)/(?P<slug>.*)/$', views.IsolatedForm, name='isolatedform'), 

請記住,所有的拍攝參數總是字符串,你應該確認他們的看法。

+0

通過緯度經度這並不解決問題。我不確定要如何命名變量。在另一個視圖中有一個類似但沒有slu simple的簡單URL,我可以將座標作爲參數。 –

+0

您是否更改斜槓(「/」)的逗號(「,」)? – jgmh

+0

我最終找到了解決我的問題的方法,那裏不需要斜線,或者只是讓每個參數都像您寫的那樣的URL模式。儘管我給了你我的讚賞,因爲你的「命名變量」技巧提供了幫助,而且實際上是這個問題的核心。謝謝 –