【发布时间】:2016-12-11 17:41:53
【问题描述】:
我需要匹配图片的路径:images/05a813eb-df00-4ed6-b8a5-2930f03fbf5d.jpg
我按目录、名称和分机拆分它
def url(self, name):
prefix, _ = name.split('/')
file_name, ext = _.split('.')
return reverse('image_storage',
args=[prefix, file_name, ext])
所以我有images、05a813eb-df00-4ed6-b8a5-2930f03fbf5d、jpg
我的网址格式:
url(r'^img/(?P<prefix>\w+)/(?P<uuid4>[0-9a-f][0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.(?P<ext>\w+)
但它不匹配,请帮我找到解决方案。
【问题讨论】:
-
URL 中有
images,正则表达式中有img,为什么?您定义了(?P<prefix>\w+),但您提供的字符串只有1 个/。[0-9a-f][0-9a-f]{8}需要 9 个字符,但有 8 个。 -
@WiktorStribiżew
/img是存储的 url,images是目录,以后可能会超过一个目录 -
试试
^(?P<prefix>\w+)/(?P<uuid4>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.(?P<ext>\w+)或更短的^(?P<prefix>\w+)/(?P<uuid4>[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12})\.(?P<ext>\w+)。啊,我明白了,可以有一个可选的目录。 -
将uuid部分简化为
(?P<uuid4>[0-9a-f-]+)可能更容易
标签: regex django django-urls