8

私はかなり標準的なdjangoアプリを持っていますが、各URLをビューに明示的にマップする必要がないようにURLルーティングを設定する方法を考えています。

たとえば、私が次のビューを持っているとしましょうProject, Links, Profile, Contact。私はむしろurlpatternsこのように見えることを望まない:

(r'^Project/$', 'mysite.app.views.project'),
(r'^Links/$', 'mysite.app.views.links'),
(r'^Profile/$', 'mysite.app.views.profile'),
(r'^Contact/$', 'mysite.app.views.contact'),

等々。Pylonsでは、次のように簡単になります。

map.connect(':controller/:action/:id')

そして、それは自動的に適切なコントローラーと機能をつかみます。Djangoに似たようなものはありますか?

4

3 に答える 3

5
mods = ('Project','Links','Profile','Contact')

urlpatterns = patterns('',
   *(('^%s/$'%n, 'mysite.app.views.%s'%n.lower()) for n in mods)
)
于 2008-10-03T18:49:41.760 に答える
5

非常に膨大な数のビューを持っていない限り、スタイルの観点から、それらを明示的に書き留めることはそれほど悪いことではありません。

ただし、patterns関数の前置引数を使用して例を短縮できます。

urlpatterns = patterns('mysite.app.views',
    (r'^Project/$', 'project'),
    (r'^Links/$', 'links'),
    (r'^Profile/$', 'profile'),
    (r'^Contact/$', 'contact'),
)
于 2008-10-03T19:51:36.410 に答える
5

これらの行に沿って特別な表示機能を使用できる場合があります。

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'}),

このコードはテストされていませんが、次のことを覚えておく必要がありますが、一般的な考え方は機能するはずです。

明示的は暗黙的よりも優れています。

于 2008-10-03T20:06:35.817 に答える