2010-06-25 23 views
5

Estoy tratando de pasar un argumento 'cadena' a una vista con una url. El urls.py vaDjango url sintáctico -pass raw cadena

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

estoy teniendo problemas con las cuerdas de puntuación, incluyendo saltos de línea, espacios y así sucesivamente. Creo que tengo que cambiar el \ w + en algo más. Básicamente, la cadena será algo copiado por el usuario de un texto de su elección, y no quiero cambiarlo. Quiero aceptar cualquier carácter y carácter especial para que la vista actúe exactamente según lo que haya copiado el usuario.

¿Cómo puedo cambiarlo?

Gracias!

Respuesta

2

Bueno, en primer lugar, hay muchos caracteres que no están permitidos en las URL. Piense en ? y espacios para principiantes. Django probablemente evitará que estos pasen a su vista sin importar lo que haga.

En segundo lugar, desea leer en el módulo re. Es lo que establece la sintaxis para esas coincidencias de URL. \w significa cualquier letra, dígito o _ en letras mayúsculas o minúsculas (básicamente, caracteres de identificación, excepto que no impide un dígito inicial).

La forma correcta de pasar una cadena a una URL es como un parámetro de formulario (es decir, después de ?paramName= en la URL y con caracteres especiales escapados, como espacios cambiados a +).

4

Tenga en cuenta que solo puede usar cadenas que se puedan entender como URL correctas, no es buena idea pasar cualquier cadena como url.

Yo uso esta expresión regular para permitir que los valores cadenas en mis URL:

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

Esto permite tener 'babosas; en su url (como: 'this-is-my_slug')

+0

BTW, '\ w' incluye' _', y '-' se trata como un caracter en lugar de un marcador de rango si es lo primero después de' ('y opcional'^'), por lo que podría escribir '(? P [- \ w] +)'. –