【问题标题】:How to write re_path url in django for reading special character?如何在 django 中编写 re_path url 以读取特殊字符?
【发布时间】:2020-06-01 12:33:21
【问题描述】:

我正在为我的项目使用 Django URL 模式。我正在发送一个包含 特殊字符数字 的字符串。在 python 函数中读取字符串时,它不会在函数中获取 ?

html

{% for user_name in userSet%}
<a class="dropdown-item" href="/slackNotification/{{user_name}}/{{data.question}}">{{ user_name }}</a>
{% endfor %}

网址

path('slackNotification/<str:slack_user_name>/<str:question>',views.slackNotification)

当我通过 URL 获取所有详细信息时,无论我在 python 代码中收到哪个字符串,它都不会包含 ? 标记,即使我的输入包含特殊字符和数字。

输入:你叫什么名字? 输出:你叫什么名字(问号不可用;)

问题 我试过这个:

re_path(r'^slackNotification/<str:slack_user_name>/(?P<question>\w+)',views.slackNotification)

输出 当前路径与任何 url 都不匹配

我想知道我的需求的确切正则表达式??

【问题讨论】:

  • 一个url中的?表示路径的结束和查询参数列表的开始,如http://example.com/apples?color=green中路径为http://example.com/apples{'color': 'green'}为查询字典。只有? 之前的部分被认为是路径。因此,如果您想在 URL 中包含 ?,您应该对其进行 URL 编码:%3F。其他特殊字符也是如此,例如空格是%20
  • @dirkgroten 非常感谢您分享您的知识。

标签: python regex django model


【解决方案1】:

只要您的 URL 中的每个路径组件都经过 URL 编码,您的第一个 path() 就是正确的。 ? 是 URL 中的一个特殊字符:它表示路径的结尾以及在它之后的任何内容都被解释为查询参数:

http://www.example.com/apples?color=green

具有路径http://www.example.com/apples 和一个查询参数color,其值为green

因此,如果你想要字符串“你叫什么名字?”要包含在您的路径中,您需要确保它是 URL 编码的:What%20is%20your%20name%3F 其中%3F 是 URL 编码的 ?%20&lt;space&gt;

【讨论】:

    【解决方案2】:

    连同上述解决方案,请参阅Url decode UTF-8 in Python 链接以获取有关 urllib.parse.quote 和 urllib.parse.unquote 的更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-06
      • 2015-03-13
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      相关资源
      最近更新 更多