如何获得AJAX回调函数以使用参数呈现Django url或html模板?

安娜

我是一个初学者,正在研究一个应用程序,该应用程序在检查是否保存了任何内容后,希望将用户重定向到结帐篮(通过POST生成Django url?还是使用变量渲染html模板?)localStorage因此,我检查并使用AJAX将数据发送到我的Django网址,以呈现通过JSON传递localStorage中的变量的模板。

但是return render(request, "pizza/prebasket.html", context)inviews.py无效:即使已接收数据,prebasket.html也不会呈现。我读到那是因为AJAX不允许这样做,而我需要通过AJAX的回调函数进行发布。但是,如何通过POST该操作以及如何将参数传递给视图或直接传递给html模板呢?window.location.href仅处理GET请求,因此我认为这不起作用)。

这是我的JavaScript和我的views.py

function previous_selection () {
  if (localStorage.getItem("preselection") != null) {

    const data = new FormData();
    data.append("preselection", preselection);
    const request = new XMLHttpRequest();
    request.open('POST', '/prebasket');
    const csrftoken = getCookie('csrftoken');
    request.setRequestHeader("X-CSRFToken", csrftoken);
    console.log("DATA IS: ", data);
    request.send(data);
    console.log("PRESELECTION IS: ", preselection);

    request.onload = () => {

      // HOW DO I CALL MY URL WITH PARAMETERS HERE?

    };
    return false;
  }
}

previous_selection();

views.py

@login_required
def prebasket(request):
  q_preseletion = request.POST.dict()
  preselection = json.loads(q_preselection["preselection"])

  items = []
  # logic iterates thru items to provide 'context'

  context = {"items": items}

  if request.is_ajax():
    html = render_to_string('pizza/prebasket.html', {'items': items})
    return HttpResponse(html)
  return render(request, "pizza/prebasket.html", context)
马特·艾伦(Matt Ellen)

如果要获取AJAX调用返回的页面内容prebasket,可以创建一个伪造的HTML文档,并将返回的HMTL放入其中,然后获取所需的元素,并将其放入当前页面的容器中。

我不确定onload支持的范围如何,因此从安全的角度来看,这是回调到onreadystatechange

request.onreadystatechange = () => {

  if(request.readyState === XMLHttpRequest.DONE){
    let status = request.status;
    if (status === 0 || (status >= 200 && status < 400)) {
      const basket = document.getElementById('basketContainer');
      let parser = new DOMParser();
      const fakePage = parser.parseFromString(request.responseText, "text/html")
      const frm = fakePage.getElementById('basket');
      basket.appendChild(frm);
    }
  }

};

假设您要进行AJAX调用的页面上有空格或篮子,例如

<div id="basketcontainer">
</div>

然后,您需要将与购物篮相关的CSS添加到同一页面中。您可能需要有条件地限制display:none购物篮容器,以防它与页面的形状混淆。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Django中集成html模板和url时出错

来自分类Dev

Django URL问题无法加载我的HTML模板

来自分类Dev

在Django中将video_url传递到html模板

来自分类Dev

django 1.11 html“href”不适用于模板 url

来自分类Dev

模板呈现的回调

来自分类Dev

如何简化模板回调函数的定义?

来自分类Dev

Django模板将HTML参数呈现为文本

来自分类Dev

如何编写单个视图函数以从不同的 url 路径呈现多个 html?

来自分类Dev

如何获取指令中模板url的html文件中定义的属性值

来自分类Dev

获取Django函数以返回并呈现HTML页面

来自分类Dev

如何使用Django模板应用外部URL

来自分类Dev

如何编写函数/定义以便在 HTML 模板中呈现 Django?

来自分类Dev

Django模板使用基于函数的视图将字典值呈现为html形式

来自分类Dev

如何从渲染的HTML模板渲染JS模板?

来自分类Dev

骨干模板呈现html内容

来自分类Dev

Django通用模板URL参考

来自分类Dev

Django:模板中的ManyToMany URL

来自分类Dev

比较 Django 模板中的 url

来自分类Dev

如何在基座中呈现HTML模板?

来自分类Dev

模板语言未使用 html 呈现

来自分类Dev

如何获得{%url logout%}在我的Django模板中工作?

来自分类Dev

如何获得{%url logout%}在我的Django模板中工作?

来自分类Dev

Django:URL模板标记中的Model参数

来自分类Dev

模板中的 URL 参数 - ID - Django

来自分类Dev

如何包装回调函数以在WinJS中获得承诺?

来自分类Dev

如何在Angular 8中模拟回调函数以使用茉莉测试诺言

来自分类Dev

使用模板变量创建Django命名URL?

来自分类Dev

在模板中使用url时的Django NoReverseMatch

来自分类Dev

如何转义HTML模板字段

Related 相关文章

热门标签

归档