[英]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.