2013-10-18 56 views
1

我試圖使用this模式在URL中傳遞2個參數,其中第二個參數是可選的。這是我的代碼:具有2個參數的Django url模式曲解第二個參數

urlpatterns = patterns('', 
    url(r'^topic/(?P<topic>.*)/(?P<page>.*)/$', activities_list, 
    url(r'^topic/(?P<topic>.*)/$', activities_list, name='activities'),name='activities_page'), 
) 

這有效,除非第二個參數是1。在這種情況下,主題topic/1和和頁面None。它適用於任何其他數字作爲第二個參數。

誰能幫我解決這個錯誤的正確方向?


UPDATE,這是越來越怪異

嘗試幾件事情之後,我發現這個模板標籤使得問題:

<img src="{{recommendation.user_picture_url}}" /> 

當我刪除這個標記,甚至將其從src屬性中移除並將其放在圖像標記之外,則該URL起作用。該變量包含Linkedin服務器上LinkedIn頭像的URL。

這是我的看法

def activities_list(request, topic, page=1): 

    print topic 
    print page 
    ... 
    return render_to_response(... 

我不明白爲什麼我的觀點是從URL中獲得了錯誤的參數(如被看見在打印),而孔響應甚至還沒有尚未呈現。

更新:已解決! (見下文)

+0

我建議兩兩件事 - 1.更改2種URL模式的順序,2縮小的正則表達式匹配像'[ \ w _-] +'如果可以的話...... – karthikr

回答

1

很多挖後,我發現,當我的測試數據庫圖片丟失,模板標籤會給圖像標籤None值src屬性。這導致請求服務器在URL /topic/1/None上查找圖像。不知何故,甚至在響應發送給客戶端之前發生了這種情況,因此我的觀點收到了新的錯誤參數。

這個標籤在我的模板上.../topic/1 /請求圖片來自.../topic/1/None,發送錯誤的參數。

<img src="{{recommendation.user_picture_url}}" /> 



PS感謝falsetru在正則表達式的改進

1

使用非greey預選賽(.*?.+?):

對於頁碼,\d+是比較合適的。

urlpatterns = patterns('', 
    url(r'^topic/(?P<topic>.*?)/$', activities_list, name='activities'), 
    url(r'^topic/(?P<topic>.*?)/(?P<page>\d+)/$', activities_list, name='activities_page'), 
) 

相反的(?P<topic>.*?),你也可以使用(?P<topic>[^/]+)

+0

這似乎不起作用。如果我在兩個參數中都加上'?',_topic_就是'topic1/1/None'。這僅在頁面參數爲1時適用於任何其他數字。 (我也嘗試複製粘貼你的整個代碼) – jvannistelrooy

+0

@jvannistelrooy,關於'r'^主題/(?P [^ /] +)/ $''和'r'^ topic /(?P [^/] +)/(?P \ d +)/ $'' – falsetru

+0

這確實很有幫助,但並沒有解決我的問題。 – jvannistelrooy