如何更新 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 模板中的渲染变量?的主要内容,如果未能解决你的问题,请参考以下文章

Django - 在渲染到模板之前翻译变量

Django模板渲染

Django 模板渲染

django 第四天模板渲染

Django模板渲染

Django 渲染模板路径配置变量使用。