0
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'),

这是我目前的正则表达式:

我的问题是:我希望能够在不使用 :p: 的情况下匹配 product_display 的正则表达式。我可以通过将 .html 放在末尾以将其与 collection_display 的正则表达式分开来做到这一点,但这并不能解决问题;如果在正则表达式中没有“:p:”,那么URI“some-collection/other/other/sku.html”将一直匹配正则表达式,直到“.html”而忽略sku。如何在不使用“:p:”结束集合正则表达式的情况下执行此操作。任何事情都会有所帮助。

谢谢

4

1 回答 1

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以斜杠和product_display“.html”结尾您的网址(反之亦然)。

于 2009-08-27T19:16:47.267 回答