2010-06-25 12 views
5

Sto provando a passare un argomento 'stringa' a una vista con un URL. L'urls.py vaDjango url parsing -pass stringa grezza

('^add/(?P<string>\w+)', add), 

sto avendo problemi con le stringhe tra cui punteggiatura, a capo, spazi e così via. Penso di dover cambiare \ w + in qualcos'altro. Fondamentalmente la stringa sarà qualcosa copiato dall'utente da un testo a sua scelta, e non voglio cambiarlo. Voglio accettare qualsiasi carattere e carattere speciale in modo che la vista agisca esattamente su ciò che l'utente ha copiato.

Come posso cambiarlo?

Grazie!

risposta

2

Bene, innanzitutto, ci sono molti caratteri che non sono consentiti negli URL. Pensa allo ? e agli spazi per i principianti. Probabilmente Django impedirà che questi vengano trasmessi alla tua vista, qualunque cosa tu faccia.

In secondo luogo, si desidera leggere il modulo re. È ciò che imposta la sintassi per quelle corrispondenze URL. \w significa qualsiasi lettera maiuscola o minuscola, cifra o _ (in pratica caratteri identificativi, tranne che non impedisce una cifra iniziale).

Il modo giusto per passare una stringa di un URL è come parametro forma (cioè dopo un ?paramName= nella URL, e con caratteri speciali sfuggito, ad esempio spazi cambiato in +).

4

Si noti che è possibile utilizzare solo stringhe che possono essere intese come URL corretti, non è una buona idea passare qualsiasi stringa come url.

Io uso questa espressione regolare per consentire valori di stringhe nei miei urls:

(?P<string>[\w\-]+) 

Questo permette di avere 'lumache; nell'URL (come: "this-is-my_slug")

+0

BTW, '\ w' include' _', e '-' viene trattato come un carattere piuttosto che come un indicatore di intervallo se è la prima cosa dopo' ['(e facoltativo'^'), quindi è possibile scrivere '(? P [- \ w] +)'. –