2011-11-01 137 views
3

我想從JavaScript傳遞一個URL到Django視圖。我有以下urls.pydjango:傳遞一個url作爲參數

 --- urls.py --- 
    url(r'^show/(?P<url>\.+)$', 'myapp.views.jsonProcess'), 

的觀點有以下聲明:

--- views.py --- 
    def jsonProcess(request, url): 

我通過JavaScript中的URL如下:

url = 'http://127.0.0.1:8000/show/' + 'http://www.google.com'; 
    window.open(url); 

我得到一個「頁面找不到(404)「錯誤,同時匹配URL。我錯過了什麼?任何和所有的指針是受歡迎的,因爲我絕望地卡住了! :(

回答

6

首先,你並不需要,如果你想它的意思是任何符號(在urls.py)逃脫點。

url(r'^show/(?P<url>.+)$', 'myapp.views.json_process') 

其次,使用encodeURIComponent正確逃生參數。

var url = 'http://127.0.0.1:8000/show/' + 
    encodeURIComponent('http://www.google.com') 

順便說一句,不要在Python中使用mixedCase for function names

函數名稱應該是小寫字母,必須使用由 分隔的單詞加下劃線以提高可讀性。


另一個需要注意的是可能在將來幫助:不要在JavaScript中硬編碼的Django的URL。您可以動態要麼in your views生成它們:

from django.core.urlresolvers import reverse 
url = reverse(
    'myapp.views.json_process', 
    kwargs={'url': 'http://www.google.com'} 
) 

或者in templates

{% url myapp.views.json_process url="http://www.google.com" %} 
+0

這工作!我正在逃避這一點。謝謝! :)我會記住命名約定......我相對較新的python! – user992726

+0

沒問題!我正在自己學習。 – katspaugh

+0

如果例如我想傳遞一個JavaScript參數,該怎麼辦? 'var query = document.getElementById(「search」).value; url_page = url +「{%url'city_view'query = query%}」;' – Reiion