Должно ли каждое приложение django в проекте иметь собственный urls.py?
Я работаю над проектом django, который будет содержать несколько приложений. Каждое приложение будет иметь свой собственный набор моделей и представлений.
Если каждое приложение также определяет собственный URL-адрес с urls.py или, возможно, функцией. Какова наилучшая практика для определения URL-адресов приложений в проекте django и интеграции этих URL-адресов с основным urls.py(root url conf)?
Ответы
Ответ 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',
)
Вы также можете посмотреть Общие представления на основе классов
Ответ 2
Если приложение в основном самодостаточно и имеет свое место в иерархии URL-адресов, имеет смысл, то оно должно иметь свой собственный urls.py. Но даже если он существует, он все еще является лишь ориентиром для разработчика проекта, если include()
не используется, чтобы перевести его в URL-адрес проекта.
Ответ 3
Если ваше приложение будет отображать что-либо пользователю с его собственным шаблоном url, у него должен быть собственный файл urls.py
. Таким образом, в вашем базовом файле urls у вас будет что-то в ваших URL-адресах, например url(r'', include('path.to.app.urls'))
. Тогда ваш файл приложения urls.py
будет иметь такой шаблон, как url(r'^$', 'path.to.app.views.view')
.