如果项目中的每个django应用程序都拥有自己的urls.py吗?

时间:2012-02-17 05:52:27

标签: django django-urls

我正在开发一个包含多个应用程序的django项目。每个应用程序都有自己的一组模型和视图。

每个应用程序是否也应该使用urls.py或函数定义自己的url。在django项目中定义应用程序网址的最佳做法是什么,并将这些网址与主要urls.py(root url conf)集成在一起?

3 个答案:

答案 0 :(得分:27)

这取决于。如果您正在使用一个应用程序处理一个小网站,您可以将所有表达式保留在相同的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

答案 1 :(得分:6)

如果应用程序主要是自包含的并且在URL层次结构中有自己的位置是有意义的,那么它应该有自己的urls.py.但即使它确实存在,它仍然只是项目开发人员的指南,除非使用include()将其移植到项目URLconf中。

答案 2 :(得分:5)

如果您的应用程序要使用自己的url模式向用户显示任何内容,则应该有自己的urls.py文件。因此,在您的基本网址文件中,您的网址包含url(r'', include('path.to.app.urls'))等内容。然后,您应用的urls.py文件将采用类似url(r'^$', 'path.to.app.views.view')的模式。