我需要制作一个可以与此 URL 一起使用的 URL 模式:
mysite.com/blog/12/بلاگ-مثال
它包含 utf-8 个字符,所以我尝试使用
\X
:re_path(r'^blog/?P<blog_id>[\d+]+/(?P<slug>[\X.*]+)/$', views.single_blog, name='single_blog')
但它没有用。我不知道为什么。也许只是因为我不擅长正则表达式。所以我只使用
.*
尝试了不同的模式接受任何事情:re_path(r'^blog/?P<blog_id>[\d+]+/(?P<slug>[.*]+)/$', views.single_blog, name='single_blog')
但这也不起作用,我得到:
The current path, blog/12/بلاگ-مثال, didn't match any of these.
所以正如我提到的我不擅长正则表达式,解决这个问题的正确方法是什么?
是时候说 now I have two problems或正则表达式是唯一的方法?
最佳答案
自 \X
以来,您匹配某些内容的方法不起作用Python 不支持 re
和 [.*]+
匹配 1+ 点或星号,但不匹配任何字符(因为您将 .*
放入 [...]
字符类中,它们表示文字符号,而不是特殊字符)。
此外,[\d+]+
也是匹配任何数字或 +
的字符类,1次以上,所以也有问题。
您可以使用 [^/]
否定字符类以匹配除 /
之外的任何字符:
r'^blog/(?P<blog_id>\d+)/(?P<slug>[^/]+)/?$'
详情
^
- 开始输入 blog/
- 文字子字符串 (?P<blog_id>\d+)
- 组“blog_id”:1+ 位数 /
- 一个 /
(?P<slug>[^/]+)
- 组“slug”:除 /
之外的 1+ 个字符/?
- 可选 /
$
- 字符串的结尾。 Here is a regex demo (注意突出显示阿拉伯文字中的字符在那里不起作用。)
关于regex - 我如何使这个正则表达式 URL 模式在 Django 2 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51109014/