2009-08-27 1 views
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'), 

Это мое текущее регулярное выражение:Как расшифровать динамический URL магии в Django

Моя проблема заключается в следующем: я хочу, чтобы иметь возможность соответствовать регулярное выражение в product_display без использования: р: в регулярном выражении. Я могу сделать это, поставив .html в конце, чтобы установить его отдельно от регулярного выражения collection_display, но это не устраняет проблему; без «: p:» в регулярном выражении, как выше URI «some-collection/other/other/sku.html» будет соответствовать регулярному выражению вплоть до «.html», не считая sku. Как это сделать, не используя «: p:», чтобы закончить регулярное выражение коллекции. Все поможет.

Благодаря

+0

Просто наконечник, рефакторинг что-Za-z0-9/_- в объект строки, так что вы можете использовать его чисто – aehlke

ответ

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 URLs с косой черты и product_display с " .html "(или наоборот).

+0

Единственная проблема в том, что я использую это как мой текущий регулярное выражение: url (r '^ ([a-zA-Z0-9/_-] +)/(? P [a-zA-Z0-9 _-] +) \. html $', 'product_display', name = ' product_display '), У меня есть ([a-zA-Z0-9/_-] +)/в начале, потому что URL-адрес может быть вообще чем угодно, если у него есть somesku.html в конце, и я хотите, чтобы можно было вытащить sku (от точки до последней косой черты). Это потому, что я хочу, чтобы было возможно: http://mysite.com/collection/sub-collection/ (соответствует коллекции) http://mysite.com/collection/sub-collection/sku.html (соответствует sku) – orokusaki

+0

Разве это не то, что ответ на этот пример? Так в чем проблема? – eswald

+0

Абсолютно нет. Он рекомендует использовать косую черту в качестве моего разделителя. Я не могу пройти полный путь (включая косые черты), вплоть до последней косой черты и одновременно использовать косые черты в качестве моего разделителя. Отрицательный взгляд - единственный способ добиться этого, а отсутствие поддержки в рамках - почему многие веб-приложения используют двоеточия и тильды в своих URL-адресах. – orokusaki