发布于 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。
,我可以在一条路线上使用一个类别的鼻涕虫,然后再使用一个物品的鼻涕虫吗?
当然,您可以使用以下方法定义路径:
path('<slug:category_slug>/<slug:article_slug>/', some_view)在这种情况下,some_view将接受三个参数,因此:
def some_view(request, category_slug, article_slug):
# …
passhttps://stackoverflow.com/questions/68945473
复制相似问题