多数のフィールドと 20000 以上のテーブル行を持つ Django モデルがあります。人間が読める URL と、大きなリストを任意のサブリストに分割する機能を容易にするために、次のような URL が必要です。
/browse/<name1>/<value1>/<name2>/<value2>/ .... etc ....
ここで、「名前」はモデル属性にマップされ、「値」はその属性の検索基準です。各「名前」はカテゴリのように扱われ、カテゴリが一致するモデル インスタンスのサブセットが返されます。
現在、これは GET パラメーターで処理できますが、ユーザーと検索エンジンの両方のために、より読みやすい URL を好みます。これらの URL サブセットは、このモデルを表示する各ページに埋め込まれます。
name1
理想的には、それぞれの名前と値のペアが、などの名前のパラメーターとしてビュー関数に渡されますname2
。ただし、正規表現の一致したテキストを介して名前付きパターンを定義することはできないと思います。私は間違っていますか?
だから、私はこのようなことをする必要があるようです:
urlpatterns = patterns('',
url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name="model_browse"),
)
これは、2 つの名前と値のペアの任意のセットと一致するはずです。それは正常に照合されますが、最後の名前と値のペアのみがパラメータとしてビュー関数に渡されます。私の推測では、各一致が前の一致を上書きしていると思います。(?:...)+ を含むことが原因であるという推測の下で、代わりに単純な繰り返しパターンを試しました。
urlpatterns = patterns('',
url(r'^browse/([\w]+/)+$', 'app.views.view', name="model_browse"),
)
...同じ問題が発生しましたが、今回*args
は最後に一致したパターンのみが含まれています。
これは、Django の URL ディスパッチャーや Python の正規表現サポートの制限ですか? これらの方法のいずれかが機能するはずです。オプションの (.*) パターンとして URL に可能な各モデル属性をハードコーディングせずにこれを実現する方法はありますか?