Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Django no sirve la vista. Error 404

Estas en el tema de Django no sirve la vista. Error 404 en el foro de Python en Foros del Web. Hola es mi primera entrada en el foro, intentaré ser claro y conciso. Estoy empezando con Django y estoy probando con un código para gestionar ...
  #1 (permalink)  
Antiguo 18/05/2013, 21:22
 
Fecha de Ingreso: mayo-2013
Mensajes: 2
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta Django no sirve la vista. Error 404

Hola es mi primera entrada en el foro, intentaré ser claro y conciso.

Estoy empezando con Django y estoy probando con un código para gestionar encuestas descargado de github: ntusurvey

Tengo problemas con algunas urls que no son servidas.

En concreto:
Código:
url(r'^edit_survey/(\w+)/$', 'survey.views.edit_survey'),
Esta vista es utilizada tanto para editar una encuesta ya creada como para crear una nueva encuesta.
def edit_survey(request, view_key=""):
Si le paso el ID de la encuesta la url responde, por ejemplo: /edit_survey/02
pero si lo que quiero es crear una nueva encuesta: /edit_survey/ me devuelve un error 404.

En un inicio la función comprueba si le pasamos la variable POST:
Código:
if request.POST:
si es así pinta los datos de la encuesta solicitada para poder ser editados con
Código:
return HttpResponse(simplejson.dumps(dict), mimetype='application/javascript')
Sino comprueba si la se le pasa alguna variable por url
Código:
try:
              if view_key != "":
                surveyID = Survey.objects.get(key=view_key).id
           except BaseException as e:
                return error_jump(request)
Sino se le pasa ninguna variable inicializa el ID para crear una nueva encuensta:
Código:
       if surveyID != 0:
        survey = Survey.objects.get(id=surveyID)
        is_collaborator = survey.is_collaborator(request.user)
        collaborators = []
        for collaborator in survey.collaboration_set.all():
            collaborators.append(str(collaborator.user.id))
        collaborators = ",".join(collaborators)
        title = survey.title
        description = survey.description
        deadline = survey.deadline
Crea el diccionario necesario para pasarle a la plantilla
Código:
dict = {'surveyID': surveyID, 'survey': survey, "title": title, "description": description, "deadline": deadline,
            'is_collaborator': is_collaborator, 'collaborators': collaborators}
    template = "edit_survey.html"
    return render_to_response(template, dict, RequestContext(request))
He omitido gran parte del código.
Por una parte me gustaría saber si he entendido el concepto y por otra saber por que la dirección localhost/edit_survey/ no pinta la pantalla para crear una nueva encuesta.

El código de la vista al completo está en el repositorio del creador por si he omitido información importante https://github.com/sfdye/ntusurvey/blob/master/survey/views.py

Un saludo y gracias por la ayuda.
  #2 (permalink)  
Antiguo 18/05/2013, 21:53
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Django no sirve la vista. Error 404

Tu error es bastante simple:

Código Python:
Ver original
  1. url(r'^edit_survey/(\w+)/$', 'survey.views.edit_survey'),

1. Es solamente para editar encuestas.
2. Es normal que te de error 404 por que la expresión regular requiere de 1 o mas caracteres de palabra para que coincida la url.

En cambio
Código Python:
Ver original
  1. url(r'^create_survey/$', 'survey.views.create_survey'),
https://github.com/sfdye/ntusurvey/b...ey/urls.py#L38
Sirve para crear encuestas.

https://github.com/sfdye/ntusurvey/b.../views.py#L538
  #3 (permalink)  
Antiguo 19/05/2013, 15:43
 
Fecha de Ingreso: mayo-2013
Mensajes: 2
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Django no sirve la vista. Error 404

Curioso por que en la demo ntusurvey.sfdye.com utilizan edit_survey para crear la encuesta.

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:32.