2011-09-28 1 views
40

Sono un neofita del django ma ho esperienza in programmazione web Python e Java con diversi framework. Mi sono trasformato in una simpatica app django, ma non riesco a farcela abbinare a www.mysite.com e non a www.mysite.com/myapp.URL Django, come mappare la radice all'app?

Ho definito url e viste nel mio urls.conf che al momento non è disaccoppiato dall'app (non importa che).

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'), 
) 

Tutto questo funziona come un fascino. Se qualcuno visita www.mysite.com/myapp, colpirà la mia vista indice che causa un reindirizzamento http al mio URL "corretto" predefinito.

Quindi, come posso aggiungere un modello che farà lo stesso di (r '^ myapp/$', 'index') ma senza/myapp - cioè, www.mysite.com dovrebbe essere sufficiente?

vorrei che questo sarebbe roba molto semplice ... Ho provato ad aggiungere una riga come:

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

tuttavia questo mi getta in un ciclo ...

spera che Django guru là fuori posso chiarire questo per me!

risposta

53

Sembra strano.

tuo ultimo tentativo dovrebbe funzionare, ma quello che Io normalmente - metto

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

Questo scala meglio quando si inizia ad aggiungere nuove applicazioni.

+0

Beh, per qualche motivo questo funziona, e la mia soluzione non lo fa - bastone così male con questo !! :) – Hoof

+0

se mi mandi gzip con la tua app minima posso vedere cosa c'è che non va. A proposito, dal mio file diverso: urlpatterns = patterns ('common.views', url ('^ $', 'home', name = 'home'), ...), Funziona bene – Guard

+0

Questo è estremamente buono, in quanto garantisce l'utente finisce alla URL reale/'corretto' per l'applicazione, piuttosto che in silenzio che implica è davvero situato alla radice. –

4

Basta mettere un'espressione regolare grezzo vuoto: R ''

ho provato qui e ha funzionato perfettamente.

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

Speranza che aiuta!

+2

qualsiasi url generato dagli helper nel template non funziona se lo fai in questo modo :( – jrwren

91

so che questa domanda è stato chiesto 2 anni fa, ma ho affrontato lo stesso problema e trovato una soluzione:

Nel progetto urls.py:

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

In 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

Great! Works on django 1.8 – fabrigm

+1

great works on django 1.9 anche – Amir

+1

PERFECT! Funziona come un fascino con Django 1.8.4 – Frankline

0

So che la risposta è in ritardo, ma ho avuto la mia giusta quota di caccia di recente. Questo è ciò che ho provato con CBV .. in Project urls.py

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

PS: E 'sempre consigliabile utilizzare namespace. Dà un buon vantaggio in seguito.

In App urls.py

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