Python Django 没有返回新页面,也没有重新加载

Posted

技术标签:

【中文标题】Python Django 没有返回新页面,也没有重新加载【英文标题】:Python Django return no new page and no reload 【发布时间】:2015-08-28 10:13:26 【问题描述】:

我有以下看法:

def addtolist(request):
  var1 = request.session.get('session_pmids', False)
  pmids = request.POST.get('pmids', '')
  pmids = pmids.split(",")

  if var1:
    pmids = pmids + var1
    request.session["session_pmids"] = pmids

  if not var1:
    request.session["session_pmids"] = pmids

  return HttpResponse(None, request)

在模板中我有以下内容:

    <form id="go" action="/addtolist/" method="post" data_url>% csrf_token %
    <input type="hidden" name="pmids" id="pmids" value="">
    <button class = "btn btn-default" onclick="getChecked()">Get selected abstracts as reference</button> 
    </form>

按下按钮将通过 getChecked() 函数检索一些数据。这会将数据添加到输入框“pmids”。这些将被投射到视图中,变量将被添加到会话中。

如何让 Django 从视图中不返回任何内容?所以,没有新页面,没有重新加载。只有请求对象(保持会话)

【问题讨论】:

你的意思是这样的? ***.com/a/28341345/940098 所以您建议制作一个 Ajaxable 响应对象并返回该响应?知道我只想返回请求的对象会是什么样子? (所以request.session["session_pmids"] = pmids 【参考方案1】:

您不需要返回请求对象来保留会话数据。使用 Ajax

在 Django 中

from django.http import JsonResponse

def addtolist(request):
  var1 = request.session.get('session_pmids', False)
  pmids = request.POST.get('pmids', '')
  pmids = pmids.split(",")

  if var1:
    pmids = pmids + var1
    request.session["session_pmids"] = pmids

  if not var1:
    request.session["session_pmids"] = pmids

  return JsonResponse('status': 'ok')

javascript

$('form#go').submit(function(e)
  e.preventDefault();
  $.post('view-url', $(this).serialize());
);

链接:

jQuery AJAX submit form https://docs.djangoproject.com/en/1.8/ref/request-response/#jsonresponse-objects

【讨论】:

我得到了 Forbidden (403) CSRF 验证失败。请求中止。我没有使用任何形式,我使用的是更新模型值的按钮

以上是关于Python Django 没有返回新页面,也没有重新加载的主要内容,如果未能解决你的问题,请参考以下文章

执行没有响应的python函数 - Django [重复]

如果 DRF 和 Django 过滤器中没有提供过滤,则返回空页面

Django:类函数不返回页面

Python Django之GET请求和POST请求及响应处理

3.Python Django之GET请求和POST请求及响应处理

Django使用表单操作数据库