url(r'^([a-zA-Z0-9/_-]+):p:(?P<sku>[a-zA-Z0-9_-]+)/$', 'product_display', name='product_display'),
url(r'^(?P<path>[a-zA-Z0-9/_-]+)$', 'collection_display', name='collection_display'),
这是我现在的正则表达式:
我的问题是:我希望能够匹配product_display的正则表达式而不使用正则表达式中的:p:。我可以通过在最后放置.html来将它与collection_display的正则表达式区分开来,但这并不能解决问题;如果没有正则表达式中的“:p:”,则URI“some-collection / other / other / sku.html”将匹配正则表达式,一直到“.html”,而不考虑sku。如何在不使用“:p:”结束集合正则表达式的情况下执行此操作。一切都会有所帮助。
由于
答案 0 :(得分:1)
看起来你的sku不能包含斜杠,所以我建议使用“/”作为分隔符。然后可以使用“.html”技巧;事实证明你的collection_display
正则表达式与点不匹配,但为了绝对确定,你可以使用负面的后视:
url(r'^([a-zA-Z0-9/_-]+)/(?P<sku>[a-zA-Z0-9_-]+)\.html$', 'product_display', name='product_display'),
url(r'^(?P<path>[a-zA-Z0-9/_-]+)(?<!\.html)$', 'collection_display', name='collection_display'),
或者,始终使用斜杠结束您的collection_display
网址,并使用“.html”结束product_display
(反之亦然)。