2015-01-15 68 views
1

假設我要傳遞的用戶名中的網址:如何在Django通過特殊字符的URL

username = '[email protected]' 

所以在網址,它是這樣的:

url(r'(?P<user_name>\w+)/$', 'user_related.views.profile', name='profile'), 

而獲取該用戶在views.py:

def profile(request, user_name): 
    user = User.objects.get(username=user_name) 

    return render(request, 'user_profile.html', {'user':user}) 

但我得到一個錯誤:

User matching query does not exist. 

因爲django自動將@轉換爲%40。我怎樣才能將實際的username傳遞給視圖?請幫我解決這個問題。謝謝!從標準urllib模塊

回答

4

使用unquote功能:

from urllib import unquote 

user = User.objects.get(username=unquote(user_name)) 

順便說一句,據我瞭解的正則表達式在您的網址()應該是[\[email protected]%.]+。普通\w+不匹配[email protected]kakar%40gmail.com

+0

完美!我仍然收到錯誤「用戶匹配查詢不存在」,但您的編輯幫助我!謝謝!然而,只是想知道,在urls中使用'%'是什麼,因爲它只會使用'@'? – Kakar

+0

'@'在URL(http:// user:[email protected])中有特殊含義,因此在「URI」RFC中建議將'@'編碼爲'%40'。但AFAIK在現實生活中可以安全地在URL路徑中使用'@'。 – catavaran

+0

這個答案是拯救生命的!非常感謝。 –