如何更新 django 模板中的渲染变量?
Posted
技术标签:
【中文标题】如何更新 django 模板中的渲染变量?【英文标题】:how to update rendered variable in django templates? 【发布时间】:2020-12-07 20:14:22 【问题描述】:我正在尝试渲染一个将在代码中多次更新的变量,但它只是将最后一个渲染到模板中, 例如:
views.py:
def test(request):
message = 'first massage'
#do something
message = 'second massage'
return render(request,'test.html','message':message)
test.html:
<h1> message </h1>
它只显示第二条消息,但我希望它显示第一条消息,然后在它更改后显示第二条消息。有什么帮助吗?
【问题讨论】:
查看您的视图函数,您使用message
变量的最后状态渲染模板一次。您可以根据需要更改变量,但模板将仅以最后一个状态呈现。注意,Django 呈现一个静态 HTML 文档。如果要制作动态页面,则应使用 AJAX 或 SPA。或者更简单的方法是使用使用传递值的javascript并一一显示。
您可以为两条消息使用不同的变量名。然后最后将两个变量都发送到模板。
【参考方案1】:
如果您想动态更改“消息”变量(例如“消息”变量与您的模型有关),
a.)在views.py中使用python更新你的'message'变量, 创建一个返回 JsonResponse 的 api。然后您可以通过 JavaScript 和更新 (document.getElementById("someID").innerHTML=``$message`)
在 Views.py 中
def testapi(request):
# do something
return JsonResponse("message":"VALUE_OF_MESSAGE",status=201)
在 javascript 文件中
fetch('/testapi')
.then(response => response.json())
.then(resp =>
console.log(resp); //output=> "message":"VALUE_OF_MESSAGE"
var message=resp.message;
document.getElementById('someId').innerHTML= ``$message`;
);
您可以随时执行任意次数的获取请求。
2.)如果您必须对页面中的元素做一些事情来更新您的消息 变量,我建议你直接使用 JavaScript。
【讨论】:
谢谢,但如果我使用这个,我应该如何返回我的渲染模板? 您将只呈现一次具有变量“消息”的模板。然后每次获取数据时通过 javascript 更新变量。 (someElement.innerHTML='$message')。【参考方案2】:您好,我认为您可以通过执行以下操作来解决它.... 你需要创建一个循环..它看起来像这样..
在你的html代码之前输入% for message in messages %
在你的html代码输入% endfor %
希望它有效....
【讨论】:
您好,感谢您的回答,但我之前尝试过,它只是循环显示消息并单独显示其字符以上是关于如何更新 django 模板中的渲染变量?的主要内容,如果未能解决你的问题,请参考以下文章