Должно ли каждое приложение django в проекте иметь свой собственный urls.py? - PullRequest
24 голосов
/ 17 февраля 2012

Я работаю над проектом django, который будет содержать несколько приложений.Каждое приложение будет иметь свой собственный набор моделей и представлений.

Если каждое приложение также определяет свои собственные URL-адреса с помощью urls.py или, возможно, функции.Каков наилучший способ определения URL-адресов приложений в рамках проекта django и интеграции этих URL-адресов с основным urls.py (root url conf)?

Ответы [ 3 ]

27 голосов
/ 17 февраля 2012

Это зависит. Если вы имеете дело с крошечным веб-сайтом с одним приложением, вы можете сохранить все выражения в одном и том же 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',
)

Вы также можете захотеть взглянуть на Родовые представления на основе классов

6 голосов
/ 17 февраля 2012

Если приложение в основном автономно и имеет свое место в иерархии URL, то оно должно иметь свой собственный urls.py. Но даже если он существует, он все еще является лишь руководством для разработчика проекта, если только include() не используется для внедрения его в URLconf проекта.

5 голосов
/ 17 февраля 2012

Если ваше приложение будет отображать что-либо для пользователя со своим собственным шаблоном URL, оно, вероятно, должно иметь собственный файл urls.py.Таким образом, в вашем файле базовых URL-адресов у вас есть что-то в ваших urlpatterns вроде url(r'', include('path.to.app.urls')).Тогда файл urls.py вашего приложения будет иметь вид, подобный url(r'^$', 'path.to.app.views.view').

...