Domanda

Devo passare un sottofondo come parametro in un percorso generato dalla piramide. Ho provato a usare Urllib.Ecode e Urllib.Quote ma non è stato possibile trovare una "risorsa" in entrambi i casi.

Generazione del percorso:

mypath='a/b/c'
new_route = route_url('new_model_route', self.request, subpath=urllib.encode(mypath))

Il mio percorso:

config.add_route('new_model_route', '/model/new/{subpath}')

URL generato (con "risorsa non trovata errore")

http://127.0.0.1:6544/rnd2/model/new/a%2Fb%2Fc

So che ha a che fare con la fuga perché l'URL http://blah/model/new/a lavori.

È stato utile?

Soluzione

Il modello di percorso /model/new/{subpath} non corrisponderebbe mai /model/new/a/b/c Quindi non capisco perché saresti in grado di generare un URL per quel modello?

Tuttavia, è possibile passare il resto dell'URL come elementi.

config.add_route('new_model_route', '/model/new/{subpath}')
request.route_url('new_model_route', 'b', 'c', subpath='a')
# /model/new/a/b/c

D'altra parte, hai un'altra opzione. Puoi creare una nuova via per abbinare questi URL, come ad esempio:

config.add_route('new_model_route', '/model/new/*subpath')
# matches /model/new/a, /model/new/a/b, etc

request.route_url('new_model_route', subpath=('a', 'b', 'c'))
# /model/new/a/b/c

Se in realtà non volevi abbinare questi URL per qualche motivo, puoi aggiungere static=True al add_route chiama, il che significa che stai usando solo il route name per generare URL ma non abbinarli alle richieste in arrivo.

subpath e traverse Essere speciale (questo è tutto documentato) ma se eri intenzionato a usare 'A/B/C' potresti usare qualcos'altro nel modello di rotta:

config.add_route('new_model_route', '/model/new/*rest')
# matches /model/new/a, /model/new/a/b, etc

request.route_url('new_model_route', rest='a/b/c')
# /model/new/a/b/c

Oh e dato che sono su un tiro, puoi usare l'approccio originale con un URL più semplice che potresti già avere nel tuo sistema.

config.add_route('new_model_route', '/model/new')
# matches /model/new only

request.route_url('new_model_route', 'a', 'b', 'c')
# /model/new/a/b/c
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top