2012-04-09 29 views
7

Tengo el siguiente URL Django:URL Django que no coincida con las variables GET

url(r'^companies/$', 'companies', name='companies'), 

Si voy a http://localhost:8000/companies/ funciona perfectamente. Sin embargo, si trato de añadir las variables GET a la URL Django plantea una 404. Por ejemplo, si voy a http://localhost:8000/companies/?c=1 Django lanza un 404. Lo curioso, es que en el 404 que dice:

La URL actual , companies/, no coincide con ninguno de estos.

¿Por qué no puedo pasar variables GET a mis URL?

Estoy usando django 1.4.

Las compañías de vista se define como:

def companies(request): 

No debería tener que aceptar todos los parámetros adicionales, ya que son variables GET, no Parámetros- URL correcta? Juro que he hecho esto cientos de veces y siempre funciona ...

+0

¿Tal vez su función 'companies' no acepta ningún parámetro? Muestre su firma, por favor –

+0

Agregado a la pregunta. Solo 'def empresas (solicitud):' – dgel

Respuesta

7

Bien. Descubierto lo que estaba causando este comportamiento tan extraño. Tengo un procesador de contexto personalizado que llama al resolve(request.get_full_path()). Aparentemente eso causa un 404 si hay alguna variable GET en la URL. Muy extraño.

+0

Donde 'resolve' es de' django.core.urlresolvers' – dgel

+2

Aparentemente se trata de un [problema] conocido (https://code.djangoproject.com/ticket/13855). 'resolve (request.path)' funciona, y arregla los 404's. – dgel

+2

No es extraño en absoluto. 'request.get_full_path()' devuelve la ruta URL * más * la cadena de consulta. Sin embargo, 'resolve' solo espera una ruta URL simple, por lo que intenta encontrar un urlpattern que coincida con la cadena que pasó * incluyendo * la cadena de consulta. Obviamente, no existe tal urlpattern, por lo que obtienes un 404. Como determinaste, necesitas usar 'request.path' porque eso no incluye la cadena de consulta. –

Cuestiones relacionadas