簡體   English   中英

在 AJAX 發布請求之后在 Django 視圖中呈現模板

[英]Render template in Django view after AJAX post request

我已經設法通過POST請求(AJAX)在我的views.py中發送和接收我的 JSON object,但無法return render(request, "pizza/confirmation.html") 我不想呆在同一頁面上,而是讓我的服務器,在數據庫上執行一些后端邏輯,然后呈現一個不同的模板來確認這一點,但除了 AJAX 之外,我沒有看到任何其他方式通過 (大)JSON object。 這是我的看法:

@login_required
def basket(request):
  if request.method == "POST":
    selection = json.dumps(request.POST)
    print(f"Selection is", selection) # selection comes out OK

  context = {"test": "TO DO"}
  return render(request, "pizza/confirmation.html", context) # not working  

我嘗試檢查request.is_ajax()並嘗試了我的 html 頁面的render_to_string ,但看起來我的錯誤在別處。 我還在終端中看到,我的POST請求之后,對我的/basket url 的GET請求被調用 - 不明白為什么。

這是我的 JavaScript 片段:

    var jsonStr = JSON.stringify(obj); //obj contains my data
    const r = new XMLHttpRequest();
    r.open('POST', '/basket');
    const data = new FormData();
    data.append('selection', jsonStr);
    r.onload = () => {
      // don't really want any callback and it seems I can only use GET here anyway

    };
    r.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
    r.send(data);
    return false;

在您的basket視圖 function 中,您始終將模板呈現為響應。 您可以通過HttpResponse將參數傳遞給您的 js 片段。 請求完成並且您在 js function 中有響應后,您可以使用window.location.href來重定向您想要的頁面。 您還可以查看此答案以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM