Django:ビューへの汎用URLルーティングを作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/168113

  •  03-07-2019
  •  | 
  •  

質問

かなり標準的な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'}),

このコードはテストされていませんが、覚えておいても一般的な考え方は機能するはずです:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top