2011-11-01 159 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