【问题标题】:variables with space in url (django)url中带有空格的变量(django)
【发布时间】:2016-04-08 18:15:56
【问题描述】:

我遇到了与How to pass variables with spaces through URL in :Django 相同的问题。我已经尝试了提到的解决方案,但所有内容都返回为“您要查找的资源已被删除、名称已更改或暂时不可用。”

我正在尝试传递一个文件名示例:new 3

在 urls.py 中:

    url(r'^file_up/delete_file/(?P<oname>[0-9A-Za-z\ ]+)/$', 'app.views.delete_file' , name='delete_file'),

在views.py中:

def delete_file(request,fname):
        return render_to_response(
        'app/submission_error.html',
        {'fname':fname,
        },
        context_instance=RequestContext(request)
)

网址:demo.net/file_up/delete_file/new%25203/

感谢您的帮助

【问题讨论】:

  • 为什么需要在url中包含它?文件(名称)听起来像是向我发布数据

标签: python django url django-urls


【解决方案1】:

考虑一下;你是否坚持使用空格?如果没有,我认为您可能会发现您的模式(和变量)更易于使用。破折号或下划线,甚至是正斜杠都会看起来更简洁、更可预测。

我还发现了这个:https://stackoverflow.com/a/497972/352452 其中引用了:

空格字符是不安全的,因为当 URL 被转录或排版或接受文字处理程序的处理时,重要的空格可能会消失,并且可能会引入无关紧要的空格。

您也可以使用文字 %20 来捕获您的空间。不确定。只是在这里留下一些想到的想法。

【讨论】:

    【解决方案2】:
    demo.net/file_up/delete_file/new%25203/
    

    此 URL 是双重编码的。空格首先编码为%20,然后% 字符编码为%25。 Django 只对 URL 解码一次,所以解码后的 url 是/file_up/delete_file/new%203/。您的模式与文字 %20 不匹配。

    如果您想坚持使用空格而不是其他分隔符,您应该找到该 URL 的来源并确保它只编码一次:demo.net/file_up/delete_file/new%203/

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 2023-01-24
      • 2014-06-17
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      相关资源
      最近更新 更多