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の正規表現と区別しますが、それでも問題は解決しません。URI「some-collection/other / other / sku.html」の上にあるように正規表現に「:p:」がないと、skuを無視して「.html」までの正規表現と一致します。「: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_displayURL をスラッシュとproduct_display「.html」で終わらせます (またはその逆)。

于 2009-08-27T19:16:47.267 に答える