当我请求url时,在`??`前面出现了更多的`/`

时间:2017-10-13 09:34:18

标签: python django

我在urls.py中有一个网址:

urlpatterns = [
    ...
    url(r'^delete_server_snapshot??(?P<snapshot_server_id>\[0-9a-z\-]+)/', app_admin_views.delete_server_snapshot),  # here 
    ...

当我提出请求时,有模板:

<td><a href="/app_admin/delete_server_snapshot??{{ snapshot_server.id }}/" type="button" class="btn-de">Delete</a></td>

但是当我点击<a>标记时出现错误,/前面会出现??个更多:

enter image description here

请求网址:

Request URL: http://localhost:8001/app_admin/delete_server_snapshot/??70e6e179-6269-445c-bd6a-cd98e55b1bdb/

1 个答案:

答案 0 :(得分:2)

不要在您的网址格式中添加问号,完全停止。 URL的?<query string>部分在网址格式中从不使用;任何查询参数都可以通过请求对象访问,不能用于匹配URL。

来自What the URLconf searches against section

  

URLconf搜索请求的URL,作为普通的Python字符串。这不包括GET或POST参数或域名。

GET参数来自查询字符串,即?逗号后的所有内容。

如果您希望snapshot_server_id标识符成为匹配的URL的一部分,请完全删除问号:

url(r'^delete_server_snapshot(?P<snapshot_server_id>[0-9a-z\-]+)/', app_admin_views.delete_server_snapshot)

如果您需要/与UUID或任何其他valid URL path character之间的分隔符,则可以使用snapshot作为分隔符。

?字符告诉Django您的网址路径在该位置结束,并在生成的网址路径的末尾插入/