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