django:将 url 作为参数传递

Posted

技术标签:

【中文标题】django:将 url 作为参数传递【英文标题】:django: passing a url as a parameter 【发布时间】:2011-12-19 06:22:13 【问题描述】:

我想将一个 URL 从 javascript 传递到 django 视图。我有以下 urls.py

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

视图具有以下声明:

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

我在javascript中传入的网址如下:

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

我在匹配 URL 时收到“找不到页面 (404)”错误。我错过了什么?任何和所有的指针都是受欢迎的,因为我绝望地卡住了! :(

【问题讨论】:

【参考方案1】:

首先,如果您希望点表示任何符号(在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" %

【讨论】:

成功了!我正在逃避那个点。谢谢! :) 我会记住命名约定...我对 python 比较陌生! 如果我想传递一个 javascript 参数怎么办? ` var query = document.getElementById("search").value; url_page = url + "% url 'city_view' query=query%";`

以上是关于django:将 url 作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中将文件路径作为 URL 参数传递

在 Django Urls 中将 URL 作为参数传递

如何在 django 2 中将 url 中的 # 作为参数传递

Django - 将模型名称从 url 传递给视图

如何在字符串中添加/作为Django URL中的参数?

Django 1.11 CreateView 传递 URL 参数