2010-01-24 10 views
29

Estoy buscando un buen tutorial para espacios de nombres de URL en Django. Encuentro que la documentación oficial es un poco escasa, carece de buenos ejemplos. Encontré similar question aquí en la pila, pero las respuestas tampoco me ayudaron a comprender completamente el tema.¿Alguien sabe bien el tutorial de espacios de nombres de URL de Django?

+0

Marcó url dispatcer doc en https://docs.djangoproject.com/en/1.3/topics/http/urls/#naming-url-patterns Le recomiendo leer toda la sección, porque si comprende el conceptos básicos sobre cómo funciona, entonces sería más fácil de entender – FallenAngel

+5

@FallenAngel: mi punto aún se mantiene - en la documentación oficial no hay buenos ejemplos de uso de espacios de nombres. – minder

Respuesta

33

De acuerdo, los documentos para esto son bastante confusos. Aquí está mi lectura de la misma (Nota: todo el código es no probado!):

En apps.help.urls:

urlpatterns = [ 
    url(r'^$', 'apps.help.views.index', name='index'), 
    ] 

En su principal urls.py:

urlpatterns = [ 
    url(r'^help/', include('apps.help.urls', namespace='help', app_name='help')), 
    url(r'^ineedhelp/', include('apps.help.urls', namespace='otherhelp', app_name='help')), 
    ] 

En su plantilla:

{% url help:index %} 

debe producir la url /help/.

{% url otherhelp:index %} 

debe producir la url /ineedhelp/.

{% with current_app as 'otherhelp' %} 
    {% url help:index %} 
{% endwith %} 

también debería producir la url /ineedhelp/.

Del mismo modo, reverse('help:index') debe producir /help/.

reverse('otherhelp:index') debe producir /ineedhelp/.

también debe producir /ineedhelp/.

Como dije, esto se basa en mi lectura de los documentos y mi familiaridad existente con cómo las cosas tienden a funcionar en Django-land. No me he tomado el tiempo de probar esto.

+0

¿por qué necesitamos app_name y namespace ambos establecidos? Solo me preguntaba. Parece que también funciona cuando no se establece el nombre_aplicación –

+0

Porque los documentos [me llevaron a creer que eran necesarios] (https://docs.djangoproject.com/en/1.4/topics/http/urls/#defining-url-namespaces) Incluso si los documentos son incorrectos o engañosos, probablemente sea más a prueba de futuro incluir 'app_name', como está documentado, en caso de que el comportamiento cambie en el futuro para coincidir con los documentos. Si realmente quieres saber por qué, tendrías que leer el código. –

+0

Buena sugerencia Normalmente trato de leer la mayor cantidad posible de fuentes, pero no pude encontrar directamente la parte relacionada, voy a investigar un poco más. Lea antes un buen artículo que dice: La fuente nunca miente, pero el manual puede hacerlo. Básicamente le dijo a la gente que leyera la fuente si encontraban un problema o usaban la API incorrectamente jeje. –

0

Esto es de la documentación

(r'^help/', include('apps.help.urls', namespace='foo', app_name='bar')), 

Tal vez debería ser más específico acerca de lo que está tratando de hacer.

Cuestiones relacionadas