【问题标题】:Python Django return no new page and no reloadPython Django 没有返回新页面,也没有重新加载
【发布时间】: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 从视图中不返回任何内容?所以,没有新页面,没有重新加载。只有请求对象(保持会话)

【问题讨论】:

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

标签: python django session


【解决方案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());
});

链接:

【讨论】:

  • 我得到了 Forbidden (403) CSRF 验证失败。请求中止。我没有使用任何形式,我使用的是更新模型值的按钮
猜你喜欢
  • 2019-09-13
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 2013-07-17
  • 2021-09-12
  • 2017-08-18
相关资源
最近更新 更多