2016-12-09 11 views
2

同じ構造の2つのURLを作成するにはどうすればいいですか? URLの前にプレフィックスを付けたくありません。私はすべての意見がexample.com/[slug]であることを望みます。ここで同じ構造の2つのURL

私のURLです:

url(r'^(?P<slug>[-_\w]+)', views.CategoryArticlesView.as_view(), name='single_category'), 
url(r'^(?P<slug>[-_\w]+)', views.SingleArticleView.as_view(), name='single_article'), 

私は簡単にそれは次のように最初のURLの前に接頭辞を追加することで動作させることができます。

url(r'^**category/**(?P<slug>[-_\w]+)', views.CategoryArticlesView.as_view(), name='single_category'), 

が、私は接頭辞なしでそれをしたいです。 これは最初のURLにのみ一致しますが、2番目のURLには一致しません。

+1

あなたはそれを行うことができ、一致するカテゴリをチェックしますか、記事を直接表示し、対応するアクションを呼び出すことができます。しかし、このアプローチはDjangoルーティングシステムの利点を完全に排除するので、非常に悪い習慣と考えられていました。 – Nevertheless

答えて

3

このようにすることはできません。代わりに、あなたはこのようないくつかの条件に基づいて、あなたのリクエストをディスパッチすることができ、別のビューを追加することがあります。

def some_view(request): 
    if some_condition: 
     return CategoryArticlesView.as_view()(self.request) 
    else: 
     return SingleArticleView.as_view()(self.request) 

、あなたのURLの設定をすることができます:

url(r'^(?P<slug>[-_\w]+)', views.some_view, name='some_name'), 
2

同じパターンの車で2つのURLを作成することはできません。Djangoは各URLパターンを順番に実行し、要求されたURLに一致する最初のパターンで停止します。 how-django-processes-a-request

関連する問題