render_to_response或redirect更改Django 1.8中的模板元素

时间:2015-06-27 05:19:31

标签: python django django-templates django-views

我正在尝试检查用户输入的电子邮件ID是否存在于数据库表中,如果存在 - 我想路由到'prof.html'模板,否则只需在login.html模板中显示一条消息。< / p>

这两个条件都正常。

然而,问题是当我使用redirect()或render_to_response()时 - div,输入等目标模板元素会自动更改(在这种情况下为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'),

仅为了您的信息,“个人资料”视图会从表格中返回一些对象,并在模板app / prof.html中呈现。

我观察到目标模板在同一个login.html模板中呈现(如何?:在浏览器网址中,我没有看到myprofile - 但是登录的那个)但是当我通过进入网站手动请求myprofile时url(localhost:xxxxx / myprofile),它完美无缺:(

在login.html中提交请求之前的网址:

enter image description here

在login.html中提交请求后的URL - myprofile呈现在同一页面中:

enter image description here

当我手动输入网址时,模板才能完美运行.. enter image description here

你能告诉我这可能是什么问题吗?

修改 用一个小技巧解决了这个问题,发布在下面

https://stackoverflow.com/questions/31091938/why-is-httpresponseredirectreverse-doesnt-redirect-to-new-page

1 个答案:

答案 0 :(得分:1)

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/ < / p>

2)如果您想重定向到另一个视图,请更好地使用网址命名空间和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