Как расшифровать магию динамического URL в Django - PullRequest
0 голосов
/ 27 августа 2009
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:" для завершения регулярного выражения коллекции. Все поможет.

Спасибо

1 Ответ

1 голос
/ 27 августа 2009

Похоже, что ваш 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 URL-адреса косой чертой, а product_display - ".html" (или наоборот).

...