2016-12-29 6 views
0

Ich versuche, einfach eine App URL eine Option /headless/ zu geben, damit es eine andere Vorlage zeigen.django 1.10 url Dispatcher funktioniert nicht

Mein project/urls.py hat:

urlpatterns = [ 
    url(r'^datastore/', include('datastore.urls')), 
] 

Mein app/urls.py hat:

app_name = 'datastore' 
urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^datastore/(?P<headless>"headless"{1})/$', views.index,name='index'), 
] 

ich einen 404-Fehler mit dem oben bekommen.

Ich habe auch versucht:

url(r'^datastore/(?P<headless>"headless"?)/$', 
url(r'^datastore/(?P<headless>\w{1})/$', views.index, name='index'), 
url(r'^datastore/(?P<headless>\w+)/$', views.index, name='index'), 

Antwort

2

Sie haben das Präfix /datastore/ aus der App urlpattern zu entfernen:

app_name = 'datastore' 
urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^(?P<headless>"headless"{1})/$', views.index,name='index'), 
] 

Nach Django's documentation:

Wenn Django begegnet include() , es hackt den Teil von th ab Die URL stimmt bis zu diesem Punkt überein und sendet die verbleibende Zeichenfolge zur weiteren Verarbeitung an die enthaltene URLconf .

So verwendet das URL-Muster in den Einstellungen Ihres Projekts das datastore/ Präfix. Sie sollten in der Lage sein, dies zu überprüfen, indem Sie versuchen /datastore/datastore/headless/ (dies sollte mit Ihrer aktuellen Konfiguration funktionieren).

Beachten Sie jedoch, dass die Kombination von regulärem Ausdruck entweder /datastore/headless/ oder /datastore// entspricht (das gleiche in allen Ihren Variationen). Dies ist möglicherweise nicht das, was Sie wollen. Wilfrieds Antwort (die das eigentliche Problem hier nicht behandelt) zeigt Ihnen, wie Sie besser tun können, was Sie vorhaben.

+0

* doh * ... got it 'url (r '^ (? P kopflos {1})/$', views.index, name = 'index'),' –

0

Es ist möglicherweise Ihre Regex auf Ihrer URL.

Wenn Sie Zugriff auf URL benötigen:

  • /Datenspeicher/

  • /Datenspeicher/ohne Kopf/

Sie zwei url erstellen können, auf die gleiche Ansicht zeigt.

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^datastore/$', views.index, name='index'), 
    url(r'^datastore/(?P<headless>(headless))/$', views.index, name='index'), 
] 

Wenn Sie möchten, ist es nicht notwendig, einen Parameter zu verwenden. Wenn du nur kopflose Möglichkeiten hast.

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^datastore/$', views.index, name='index'), 
    url(r'^datastore/headless/$', views.index, name='index'), 
] 
+1

Dies ist nützlich für loswerden des doppelten '/', das vom ursprünglichen regulären Ausdruck benötigt wird. Es gibt jedoch dem Einstiegspunkt "Index" keine Informationen darüber, ob "kopflos" vorhanden war oder nicht. – nickie

Verwandte Themen