Django:ビューへの汎用URLルーティングを作成するにはどうすればよいですか?
質問
かなり標準的なdjangoアプリがあり、各URLをビューに明示的にマップする必要がないように、URLルーティングを設定する方法を疑問に思っています。
たとえば、次のビューがあるとしましょう:プロジェクト、リンク、プロファイル、連絡先
。私の urlpatterns
は次のようにはなりません:
(r'^Project/
など。 パイロンでは、次のように簡単です:
map.connect(':controller/:action/:id')
そして、適切なコントローラーと機能を自動的に取得します。 Djangoに類似したものはありますか?
, 'mysite.app.views.project'),
(r'^Links/
など。 パイロンでは、次のように簡単です:
<*>
そして、適切なコントローラーと機能を自動的に取得します。 Djangoに類似したものはありますか?
, 'mysite.app.views.links'),
(r'^Profile/
など。 パイロンでは、次のように簡単です:
<*>
そして、適切なコントローラーと機能を自動的に取得します。 Djangoに類似したものはありますか?
, 'mysite.app.views.profile'),
(r'^Contact/
など。 パイロンでは、次のように簡単です:
<*>
そして、適切なコントローラーと機能を自動的に取得します。 Djangoに類似したものはありますか?
, 'mysite.app.views.contact'),
など。 パイロンでは、次のように簡単です:
<*>そして、適切なコントローラーと機能を自動的に取得します。 Djangoに類似したものはありますか?
解決
mods = ('Project','Links','Profile','Contact')
urlpatterns = patterns('',
*(('^%s/%n, 'mysite.app.views.%s'%n.lower()) for n in mods)
)
他のヒント
非常に多数のビューがある場合を除き、スタイルの観点から、それらを明示的に書き留めることはそれほど悪くありません。
ただし、 patterns
関数のプレフィックス引数を使用して、例を短縮できます。
urlpatterns = patterns('mysite.app.views',
(r'^Project/, 'project'),
(r'^Links/, 'links'),
(r'^Profile/, 'profile'),
(r'^Contact/, 'contact'),
)
次の行に沿って特別なビュー機能を使用できる場合があります。
def router(request, function, module):
m =__import__(module, globals(), locals(), [function.lower()])
try:
return m.__dict__[function.lower()](request)
except KeyError:
raise Http404()
そしてこのようなurlconf:
(r'^(?P<function>.+)/
このコードはテストされていませんが、覚えておいても一般的な考え方は機能するはずです:
明示的は暗黙的よりも優れています。
, router, {"module": 'mysite.app.views'}),
このコードはテストされていませんが、覚えておいても一般的な考え方は機能するはずです:
明示的は暗黙的よりも優れています。