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

Par*_*rag 24 django django-urls

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

每个应用程序是否也应该使用urls.py或函数来定义自己的url.在django项目中定义应用程序URL的最佳实践是什么,并将这些URL与主urls.py(root url conf)集成?

小智 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',
)
Run Code Online (Sandbox Code Playgroud)

您还可能希望查看基于类的通用视图

  • 更新到django 1.9,`patterns`应该替换为`url`s列表,你不需要在字符串的开头有'myproject'. (2认同)

Ign*_*ams 6

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


Jam*_*mey 5

如果您的应用程序将使用自己的url模式向用户显示任何内容,则它应该有自己的urls.py文件.所以在你的基本网址文件中,你的urlpatter中就会有类似的内容url(r'', include('path.to.app.urls')).然后您的应用程序的urls.py文件将具有类似的模式url(r'^$', 'path.to.app.views.view').