【问题标题】:django: passing a url as a parameterdjango:将 url 作为参数传递
【发布时间】: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)”错误。我错过了什么?任何和所有的指针都是受欢迎的,因为我绝望地卡住了! :(

【问题讨论】:

    标签: javascript django django-views


    【解决方案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%}";`
    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2010-12-18
    • 2014-03-22
    • 2021-01-05
    相关资源
    最近更新 更多