web-dev-qa-db-ja.com

Djangoプロジェクト内のすべてのアプリには、独自のurls.pyが必要ですか?

私はDjangoプロジェクトに取り組んでいます。このプロジェクトには複数のアプリが含まれます。各アプリには独自のモデルとビューのセットがあります。

各アプリが独自のURLをurls.pyまたは関数で定義する必要もあります。 Djangoプロジェクト内でアプリのURLを定義し、これらのURLをメインのurls.py(ルートURL conf)と統合するためのベストプラクティスは何ですか?

27
Parag

場合によります。 1つのアプリで小さなウェブサイトを扱っている場合は、すべての式を同じurls.pyに保持できます。

ただし、本当に別のアプリを使用するより複雑なサイトを扱っている場合は、次の構造が望ましいです。

  • myapp
    • admin.py
    • forms.py
    • models.py
    • urls.py
    • views.py
  • manage.py
  • settings.py
  • urls.py

各フォルダに独自の__ init__.pyが必要であることを忘れないでください

# urls.py
from Django.conf.urls.defaults import *
from Django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    # Notice the expression does not end in $, 
    # that happens at the myapp/url.py level
    (r'^myapp/', include('myproject.myapp.urls')),
)

# myapp/urls.py
from Django.conf.urls.defaults import *

urlpatterns = patterns('myproject.myapp.views',
    (r'^$', 'default_view',
    (r'^something/$', 'something_view',
)

Class-based Generic Views もご覧ください。

27
Keith

アプリの大部分が自己完結型で、URL階層内に独自の場所があることが理にかなっている場合は、独自のurls.pyが必要です。ただし、存在する場合でも、 include() を使用してプロジェクトのURLconfに移植しない限り、それはプロジェクト開発者にとってのガイドラインにすぎません。

アプリが独自のURLパターンでユーザーに何かを表示する場合は、おそらく独自の_urls.py_ファイルが必要です。したがって、ベースurlsファイルでは、url(r'', include('path.to.app.urls'))のようなものをurlpatternsに含めます。そうすると、アプリの_urls.py_ファイルはurl(r'^$', 'path.to.app.views.view')のようなパターンになります。

5
Jamey