2011-09-28 20 views
40

Soy bastante nuevo en django pero tengo experiencia en programación web Python y Java con diferentes frameworks. Me he hecho una buena aplicación de django, pero no puedo hacer que coincida con www.misitio.com en lugar de www.misitio.com/myapp.Django URLS, ¿cómo mapear raíz a aplicación?

He definido urls y vistas en mi urls.conf que actualmente no está desacoplado de la aplicación (no me importa).

urlpatterns = patterns('myapp.views', 
    (r'^myapp/$', 'index'), 
    (r'^myapp/(?P<some_id>\d+)/global_stats/$', 'global_stats'), 
    (r'^myapp/(?P<some_id>\d+)/player/(?P<player_id>\d+)/$', 'player_stats'), 
) 

Todo esto funciona como un encanto. Si alguien va a www.misitio.com/myapp, accederá a mi vista de índice, lo que provoca una redirección http a mi URL predeterminada "correcta".

Entonces, ¿cómo puedo agregar un patrón que haga lo mismo que (r '^ myapp/$', 'index') pero sin/myapp, es decir, www.mysite.com debería ser suficiente?

yo creo que esto sería un material muy básico ... He intentado añadir una línea como:

(r'^$', 'index'), 

sin embargo esto me tira en un bucle ...

Espero que Django gurús por ahí puede aclarar esto para mí!

Respuesta

53

Esto suena extraño.

Su último intento debería funcionar, pero lo que no me suelo - puse

urlpatterns = patterns('', 
    (r'^$', lambda r: HttpResponseRedirect('myapp/')), 
    ... 
) 

Esta escala mejor cuando se inicia la adición de nuevas aplicaciones.

+0

Bueno, por alguna razón esto funciona, y mi solución no - stick tan mal con este !! :) – Hoof

+0

si me envía gzip con su aplicación mínima, puedo ver qué le pasa. Por cierto, de mi archivo diferente: urlpatterns = patterns ('common.views', url ('^ $', 'home', name = 'home'), ...), Que funciona muy bien – Guard

+0

Esto es muy bueno, ya que garantiza que el usuario termina en la URL real de/'correcta' para la aplicación, en lugar de lo que implica silencio es realmente situado en la raíz. –

4

sólo hay que poner una expresión regular prima vacío: R ''

he probado aquí y funcionó perfectamente.

urlpatterns = patterns('', 
    url(r'', include('homepage.urls')), 
    url(r'^homepage/', include('homepage.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
) 

Hope it help!

+2

cualquier URL generada a partir de ayudantes en la plantilla no funciona si lo haces de esta manera :( – jrwren

91

Sé que esta pregunta se hizo hace 2 años, pero me he enfrentado el mismo problema y encontrar una solución:

En el proyecto urls.py:

urlpatterns = patterns('', 
    url(r'^', include('my_app.urls')), #NOTE: without $ 
) 

En my_app.urls.py:

urlpatterns = patterns('', 
    url(r'^$', 'my_app.views.home', name='home'), 
    url(r'^v1/$', 'my_app.views.v1', name='name_1'), 
    url(r'^v2/$', 'my_app.views.v2', name='name_2'), 
    url(r'^v3/$', 'my_app.views.v3', name='name_3'), 
) 
+1

¡Genial! Funciona en django 1.8 – fabrigm

+1

funciona bien en django 1.9 también – Amir

+1

PERFECTO! Funciona como un encanto con Django 1.8.4 – Frankline

0

Sé que la respuesta es tardía, pero tuve mi parte justa de la caza recientemente. Esto es lo que he intentado con CBV .. en el Proyecto urls.py

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^$', include('app_name.urls', namespace='app_name')), 
] 

PD: Siempre es recomendable utilizar espacio de nombres. Da una buena ventaja más adelante.

En App urls.py

urlpatterns = [ 
    url(r'^$', views.IndexPageView.as_view(), name='index'), 
] 
Cuestiones relacionadas