首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><str:slug>和<slug:slug>在Django应用程序urls.py中的区别

<str:slug>和<slug:slug>在Django应用程序urls.py中的区别
EN

Stack Overflow用户
提问于 2021-08-26 21:25:44
回答 1查看 608关注 0票数 2
  1. 为什么在某些情况下在urls.py中使用str:slug,而在其他情况下则使用urls.py:urls.py?有什么关系?那么哪个选项更好呢?
  2. ,我可以在一条路线上使用一个类别段塞,然后再使用一个物品段塞吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 21:34:57

为什么在某些情况下在urls.py中使用str:slug,而在其他情况下则使用slug:slug?有什么关系?

[Django-doc]是不同的。实际上,<str:slug>将接受与<slug:slug>将接受的字符串不同的字符串集(在本例中是严格的超集)。

该文档解释了将匹配的内容:

  • str -匹配任何非空字符串,不包括路径分隔符'/‘。如果表达式中没有包含转换器,则这是默认的。

  • slug -匹配由ASCII字母或数字组成的任何弹格字符串,再加上连字符和下划线字符。例如,building-your-1st-django-site.

因此,str将匹配任何非空字符串,因此它将接受'foo''straße''foo bar',而slug路径转换将仅作为ASCII字母和数字以及连字符和下划线的非空序列存在。

我们还可以在implementation of the StringConverter [GitHub]implementation of the SlugConverter [GitHub]中看到这一点。

类StringConverter: regex = '^/+‘def to_python(self,value):返回值def to_url(self,value):返回值#⋮class SlugConverter(StringConverter):regex = '-a-zA-Z0-9_+’

因此,StringConverter将使用[^/]+正则表达式,而段塞转换器将与[-a-zA-Z0-9_]+正则表达式匹配。

通常,如果你使用的是鼻涕虫,最好是使用鼻塞路径转换器,因为这将不匹配非鼻涕虫,而且通常一个与鼻涕虫匹配,而不是字符串。

一个鼻涕虫已经介绍了一个漂亮的URL工作。URL参数包含空格的URL将被丑陋的百分比编码所取代,因此是foo%20bar,而段塞通常使用连字符,所以是foo-bar

,我可以在一条路线上使用一个类别的鼻涕虫,然后再使用一个物品的鼻涕虫吗?

当然,您可以使用以下方法定义路径:

代码语言:javascript
复制
path('<slug:category_slug>/<slug:article_slug>/', some_view)

在这种情况下,some_view将接受三个参数,因此:

代码语言:javascript
复制
def some_view(request, category_slug, article_slug):
    # …
    pass
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68945473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档