2012-02-17 16 views
22

Estoy trabajando en un proyecto django que contendrá varias aplicaciones. Cada aplicación tendrá su propio conjunto de modelos y vistas.¿Debería cada aplicación django dentro de un proyecto tener su propio urls.py?

En caso de que cada aplicación también defina su propia URL con un urls.py o tal vez una función. ¿Cuál es la mejor práctica para definir las URL de las aplicaciones dentro de un proyecto de django, e integrar estas URL con las principales urls.py (root url conf)?

Respuesta

26

Depende. Si está tratando con un sitio web pequeño con una aplicación, puede mantener todas las expresiones en el mismo urls.py.

Sin embargo, cuando usted está tratando con un sitio más complicado con aplicaciones verdaderamente separados, me quedo con la siguiente estructura:

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

No se olvide de las necesidades de cada carpeta es poseer __ 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', 
) 

También puede para mirar Class-based Generic Views

+1

Actualizando a django 1.9, 'patterns' debe ser reemplazado por una lista de' url's an d no necesita 'mi proyecto' al comienzo de las cuerdas. – ericksonla

6

Si la aplicación es en su mayoría autónoma y tiene su propio lugar en la jerarquía de URL tiene sentido, entonces debe tener su propio urls.py. Pero incluso si existe, sigue siendo solo una guía para el desarrollador del proyecto a menos que se use include() para injertarlo en el URLconf del proyecto.

5

Si su aplicación va a mostrar algo al usuario con su propio patrón de URL, probablemente debería tener su propio archivo urls.py. Por lo tanto, en el archivo de urls base, tendría algo en sus patrones url como url(r'', include('path.to.app.urls')). Entonces el archivo urls.py de su aplicación tendría un patrón como url(r'^$', 'path.to.app.views.view').

Cuestiones relacionadas