質問

このようなURLパターンがあります:

urlpatterns = (
    url(r'^$', list_titles, name='list'),
    url(r'^(?P<tag>[a-z\-0-9]+?)/$', list_titles, name='filtered-list'),
    url(r'^(?P<title>\S+?)/$', show_title, name='title'),
)

filtered-listtitle 同じことに一致します。

一致するものの利用可能なリストがある場合 tagfiltered-list, 、 私が欲しい list_titles 発砲する。しかし、マッチングがない場合 tag, 、私はそれをURLプロセッサにバブルしたいので show_title 火が消えます。

一致するタイトルがない場合は、そこで適切な404を上げます。

私はビューの内側からこれを行うことができることを知っています...しかし、それはビューにプロセスを強化する必要があるのは少し臭いです。 URLの注文で、最初に選択されるものとそれが何を渡すかを決定したいと思います。

役に立ちましたか?

解決

これは確かにロジックを見ることです。すべてのurls.pyは、検証を実行するのではなく、URLパターンを一致させるためです。使用できます Http404 これを処理するための例外。

from django.http import Http404

def detail(request, poll_id):
    try:
        p = Poll.objects.get(pk=poll_id)
    except Poll.DoesNotExist:
        raise Http404
    return render_to_response('polls/detail.html', {'poll': p})

または、次のことを見つけることができます get_object_or_404 また get_list_or_404 方法は、少し短縮します。


次の約束された編集。あなたが探しているものではありませんが...

urlpatterns = (
    url(r'^$', list_titles, name='list'),
)

if 1=1: # Your logic here
    urlpatterns += ( url(r'^$', list_titles, name='list'), )

urlpatterns += (
    url(r'^(?P<title>\S+?)/$', show_title, name='title'),
    url(r'^spam/$', spam_bar),
    url(r'^foo/$', foo_bar),
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top