Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[django] route aan de praat krijgen

Pagina: 1
Acties:

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Hoi

Ik zit voor het eerst in tijden weer wat software te coden en ben begonnen met django. Op zich ben ik bekend met alle concepten, maar ik krijg een route niet aan de gang.

Nu heb ik de alombekende tango with django tutorial gedaan en op basis hiervan ben ik een webappje aan het maken om een jabberserver te beheren.

Alles prima maar ik krijg een bepaalde route niet goed aan ed gang.
in mijn voorbeeld heb ik deze routing zitten:

code:
1
2
3
4
5
6
7
8
9
10
11
urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^about/$', views.about, name='about'),
    url(r'^category/(?P<category_name_url>\w+)$', views.category, name='category'),
    url(r'^add_category/$', views.add_category, name='add_category'),
    url(r'^category/(?P<category_name_url>\w+)/add_page/$', views.add_page, name='add_page'),
    url(r'^register/$', views.register, name='register'),
    url(r'^login/$', views.user_login, name='login'),
    url(r'^restricted/$', views.restricted, name='restricted'),
    url(r'^logout/$', views.user_logout, name='logout'),
    )

Hier is met name deze route relevant:
url(r'^category/(?P<category_name_url>\w+)/add_page/$', views.add_page, name='add_page'),


ik wil deze route imiteren door een userlisting aan te bieden op de url '/jabberuser' waarna je naar '/jabberuser/boudewijn' kunt gaan om 'boudewijn' te bekijken. klinkt niet al te lastig he? ;)


Dit werkt in de tutorial kan ik naar http://localhost:8000/rango/category/Python gaan , waarbij Python de naam van de category is . Werkt prima.

Nou als ik dat dan eens omzet naar mijn voorbeeld:

code:
1
2
3
4
5
6
7
8
urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^about/$', views.about, name='about'),
    url(r'^jabberuser/(?P<user>\w+)$', views.jabberuser, name='jabberuser'),
    url(r'^jabberuser/$', views.jabberuserlist, name='userlist'), 
   
    url(r'^login/$', views.user_login, name='login'),
    url(r'^logout/$', views.user_logout, name='logout'),


Goed, wat werkt er wel en niet:
http://localhost:8000/jabberadmin/jabberuser/

Werkt prima, geeft me de zelfgebouwde listing weer. Dit geeft ook aan dat de urls.py van mijn projectje aangesproken wordt... allemachtig prachtig dus.

Als ik dan doorhop naar:

http://localhost:8000/jabberadmin/jabberuser/boudewijn


Wat een bestaande user is... dan faalt de route:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Page not found (404)
Request Method:     GET
Request URL:    http://localhost:8000/jabberadmin/jabberuser/boudewijn/

Using the URLconf defined in jabberadmin_project.urls, Django tried these URL patterns, in this order:

    ^jabberadmin/ ^$ [name='index']
    ^jabberadmin/ ^about/$ [name='about']
    ^jabberadmin/ ^jabberuser/(?P<user>\w+)$ [name='jabberuser']
    ^jabberadmin/ ^jabberuser/$ [name='userlist']
    ^jabberadmin/ ^login/$ [name='login']
    ^jabberadmin/ ^logout/$ [name='logout']
    ^admin/


The current URL, jabberadmin/jabberuser/boudewijn/, didn't match any of these.

Het maakt hierbij niet uit of ik er een / achter zet of niet. Als het goed is valt mijn username (boudewijn) onder \w+, wat een collectie is van meerdere letters/cijfers/underscores. Als ik online kijk lijkt die regex ook prima te werken op regexpal enzo.

Nu heb ik al wat lopen tweaken met die routes maar ik krijg hem niet aan de praat.

Weet iemand waar dit fout gaat?

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 21-11 14:01

deadinspace

The what goes where now?

Volgensmij ontbreekt er een / in die regexp.

/jabberadmin/jabberuser/boudewijn zou wel matchen, maar het pad is /jabberadmin/jabberuser/boudewijn/ . Wel vind ik het dan vreemd dat het in die tutorial dan wel zou werken...

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Met en zonder slash faalt beide. Ff getest:

code:
1
2
    url(r'^jabberuser/(?P<user>\w+)$', views.jabberuser, name='jabberuser'),
    url(r'^jabberuser/(?P<user>\w+)/$', views.jabberuser, name='jabberuser'),

Beide in mijn urls.py gezet...

Et voila:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Page not found (404)
Request Method:     GET
Request URL:    http://localhost:8000/jabberadmin/jabberuser/boudewijn/

Using the URLconf defined in jabberadmin_project.urls, Django tried these URL patterns, in this order:

    ^jabberadmin/ ^$ [name='index']
    ^jabberadmin/ ^about/$ [name='about']
    ^jabberadmin/ ^jabberuser/(?P<user>\w+)$ [name='jabberuser']
    ^jabberadmin/ ^jabberuser/(?P<user>\w+)/$ [name='jabberuser']
    ^jabberadmin/ ^jabberuser/$ [name='userlist']
    ^jabberadmin/ ^jabberuserlist/$ [name='userlist']
    ^jabberadmin/ ^login/$ [name='login']
    ^jabberadmin/ ^logout/$ [name='logout']
    ^admin/
    media/(?P<path>.*)

The current URL, jabberadmin/jabberuser/boudewijn/, didn't match any of these.

More failure. Grmbl.

  • mrwiggs
  • Registratie: December 2004
  • Laatst online: 21-11 09:11
Hm het lijkt er goed uit te zien. Misschien is user een verboden parameternaam, probeer eens username o.i.d.

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Oh boudewijn wat ben je niet wakkker.

Goed, ik heb valsgespeeld: mijn usernames zijn van het format boudewijn-afdeling-werkgever. Dat laatste heb ik geknipt ivm privacy. Tsja \w+ matcht daar niet op.

Als ik [a-zA-Z-]+ als regex gebruik pak ik de -'s mee en zou het wel moeten werken. Dom dom dom.

[ Voor 3% gewijzigd door Boudewijn op 08-08-2014 00:03 ]