【问题标题】:Retrieving an IP address as a parameter inside a Django URL在 Django URL 中检索 IP 地址作为参数
【发布时间】:2012-12-06 14:35:37
【问题描述】:

我的应用程序列出了一些游戏服务器的 IP 地址。

我想添加一个简单的搜索引擎,其中包含一个正则表达式。我会输入^200. 以仅列出以200. 开头的IP 地址

表单会通过发送这样的 GET 请求将我重定向到结果页面:

/servers/search/^200./page/1/range/30/

这是我在urls.py 中使用的行:

url(r'^servers/search/(?P<search>[a-zA-Z0-9.]+)/page/(?P<page>\d+)/range/(?P<count>\d+)/$', gameservers.views.index)

但它并没有按我预期的方式工作。没有显示结果。我故意犯了语法错误来查看局部变量。然后我意识到search 变量的值如下:

^200./page/1/range/30/

我该如何解决这个问题?我考虑过将search 参数移到url 的结尾,但是看看是否有办法限制下一个/ 的值可能会很有趣。

【问题讨论】:

  • 能否在搜索中不添加多个搜索过滤器。例如有 /servers/search/begins/200 或 /servers/search/contains/300 或 /servers/search/endswith/100
  • 太长了,我个人更喜欢使用正则表达式而不是手动过滤器,不过感谢您的建议!
  • 请记住,在某些情况下,您将向需要编码的 URL 添加特殊字符。还要注意斜杠字符,因为如果您不在查询字符串中使用它,它可能会改变 url。

标签: python regex django url filter


【解决方案1】:

您的正则表达式根本不匹配:您不接受^ 字符。但即使是这样,也无法在search 变量中捕获完整的 URL,因为这样 URL 的其余部分将不匹配。

但是,我不会尝试解决此问题。试图在 URL 本身中捕获复杂的模式通常是错误的。对于搜索值,将其移至 GET 查询参数是完全可以接受的,这样您的 URL 将如下所示:

/servers/search/?search=^200.&page=1&range=30

或者,如果您愿意,您仍然可以在 URL 中捕获 pagerange 值,但将 search 值保留为查询参数。

【讨论】:

  • 谢谢,我同意这是避免与 URL 过滤功能混淆的最佳解决方案之一,我完全忘记了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2013-09-13
  • 1970-01-01
  • 2011-09-09
  • 2014-03-04
  • 2010-12-05
  • 1970-01-01
相关资源
最近更新 更多