python - examples - render_to_response o redirect cambia los elementos de plantilla en Django 1.8
templates django settings (1)
Estoy intentando verificar si la ID de correo electrónico ingresada por el usuario está en la tabla de la base de datos, si existe. Me gustaría enrutar a la plantilla ''prof.html''; de lo contrario, solo mostraré un mensaje en la plantilla login.html.
Ambas condiciones funcionan bien.
Sin embargo, el problema es cuando uso redirect () o render_to_response () - los elementos de la plantilla de destino como div, input, etc., se cambian automáticamente (prof.html en este caso)?
¿Podemos también enviar la información de contexto a la plantilla de destino? (datos de respuesta o cualquier objeto de la base de datos y redirigir a la plantilla prof.html a través de la vista en este caso)
A continuación está mi código:
Views.py
def verifyme(request):
if request.method == "POST":
emailid4loginV = request.POST[''emailid4login_Aj'']
else:
emailid4loginV = ''''
response_data = ''''
return HttpResponse(response_data, content_type="text/plain")
response_data = ''''
if Employee.objects.filter(email = emailid4loginV).exists():
response_data=''Thanks for waiting - login successful''
#return render_to_response(''app/prof.html'', { ''response_data'':response_data},
# context_instance = RequestContext( request ) )
return redirect(''/myprofile'')
else:
response_data=''Ouch! you are not a registered user!''
return HttpResponse(response_data, content_type="text/plain")
urls.py
url(r''^myprofile$'', ''app.views.profile'', name=''profile''),
Solo para su información, la vista ''perfil'' devuelve algunos objetos de la tabla y los renderiza en la aplicación de plantilla / prof.html.
Observé que la plantilla de destino se está procesando en la misma plantilla de login.html (¿Cómo ?: En la URL del navegador, no veo mi perfil, pero sí el de inicio de sesión). Pero cuando solicito myprofile manualmente, ingreso en la url del sitio web (localhost) : xxxxx / myprofile), funciona perfectamente :(
URL antes de enviar la solicitud en login.html:
URL después de enviar la solicitud en login.html - myprofile se representa en la misma página:
Cuando escribo manualmente la URL, la plantilla funciona perfectamente ...
¿Podrías decirme cuál podría ser el problema?
EDIT: resolvió este problema con un pequeño truco, publicado en el siguiente
1) En realidad, hay muchas maneras de pasar datos a la siguiente vista ... generalmente en tales casos, como si tuvieras una mejor forma: usar sesiones (cookie | localstorage | sessionstorage), es como el portapapeles ... guardar los datos de la sesión en una vista y obtenerlo más tarde en otro. Por ejemplo:
Primera vista:
self.request.session[''response_data''] = ''some text''
self.request.session.set_expiry(0) # user’s session cookie will expire when the user’s Web browser is closed.
Otras vistas:
response_data = self.request.session.get(''response_data'', '''')
Pero si planea usar estos datos en la plantilla, Django tiene una interfaz más de alto nivel para él y, en su caso, semánticamente correcta para usarla: el marco de mensajes https://docs.djangoproject.com/en/1.8/ref/ contrib / mensajes /
2) Si desea redirigir a otra vista, utilice mejor los espacios de nombres de la URL e reverse
https://docs.djangoproject.com/en/1.8/ref/urlresolvers/#reverse
return HttpResponseRedirect(reverse(app.views.profile)) # here I''ve passed callable object because you have not show your app url namespace, but generally use namespaces
https://docs.djangoproject.com/en/1.8/topics/http/urls/#url-namespaces