render_to_response 或重定向更改 Django 1.8 中的模板元素
render_to_response or redirect changes the template elements in Django 1.8
我正在尝试检查用户输入的电子邮件 ID 是否存在于数据库 table 中,如果存在 - 我想路由到 'prof.html' 模板,否则只在login.html 模板。
两个条件都正常。
但是,问题是当我使用 redirect() 或 render_to_response() -
目标模板元素,如 div、input 等,正在自动更改(在本例中为 prof.html)?
我们是否也可以将上下文信息发送到目标模板?
(在这种情况下,响应数据或数据库中的任何对象并通过视图重定向到 prof.html 模板)
下面是我的代码:
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'),
仅供参考,'profile' 视图执行 return 来自 table 的一些对象并在模板 app/prof.html.
我观察到目标模板正在同一个 login.html 模板中呈现(如何?:在浏览器 url 中,我没有看到我的配置文件 - 但是用于登录的那个)但是当我请求通过在网站 url (localhost:xxxxx/myprofile) 中手动输入 myprofile,它完美运行:(
URL 在 login.html 中提交请求之前:
URL 在 login.html 中提交请求后 - 我的个人资料在同一页面中呈现:
当我手动输入 url 时,模板工作得很好..
你能告诉我可能是什么问题吗?
编辑:
用一个小技巧解决了这个问题,贴在下面
1) 实际上有很多方法可以将数据传递到下一个视图......通常在这种情况下你有更好的方法 - 使用会话(cookie | localstorage | sessionstorage),就像剪贴板一样......保存会话一个视图中的数据,稍后在另一个视图中获取它。例如:
第一个视图:
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.
其他观点:
response_data = self.request.session.get('response_data', '')
但是,如果您计划只在模板中使用此数据,Django 有某种更高级的接口,在您的情况下,语义上有权使用它 - 消息框架 https://docs.djangoproject.com/en/1.8/ref/contrib/messages/
2) 如果你想重定向到另一个视图更好地使用 url 命名空间和 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
我正在尝试检查用户输入的电子邮件 ID 是否存在于数据库 table 中,如果存在 - 我想路由到 'prof.html' 模板,否则只在login.html 模板。
两个条件都正常。
但是,问题是当我使用 redirect() 或 render_to_response() - 目标模板元素,如 div、input 等,正在自动更改(在本例中为 prof.html)?
我们是否也可以将上下文信息发送到目标模板? (在这种情况下,响应数据或数据库中的任何对象并通过视图重定向到 prof.html 模板)
下面是我的代码:
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'),
仅供参考,'profile' 视图执行 return 来自 table 的一些对象并在模板 app/prof.html.
我观察到目标模板正在同一个 login.html 模板中呈现(如何?:在浏览器 url 中,我没有看到我的配置文件 - 但是用于登录的那个)但是当我请求通过在网站 url (localhost:xxxxx/myprofile) 中手动输入 myprofile,它完美运行:(
URL 在 login.html 中提交请求之前:
URL 在 login.html 中提交请求后 - 我的个人资料在同一页面中呈现:
当我手动输入 url 时,模板工作得很好..
你能告诉我可能是什么问题吗?
编辑: 用一个小技巧解决了这个问题,贴在下面
1) 实际上有很多方法可以将数据传递到下一个视图......通常在这种情况下你有更好的方法 - 使用会话(cookie | localstorage | sessionstorage),就像剪贴板一样......保存会话一个视图中的数据,稍后在另一个视图中获取它。例如:
第一个视图:
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.
其他观点:
response_data = self.request.session.get('response_data', '')
但是,如果您计划只在模板中使用此数据,Django 有某种更高级的接口,在您的情况下,语义上有权使用它 - 消息框架 https://docs.djangoproject.com/en/1.8/ref/contrib/messages/
2) 如果你想重定向到另一个视图更好地使用 url 命名空间和 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