【问题标题】:how to update rendered variable in django templates?如何更新 django 模板中的渲染变量?
【发布时间】: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并一一显示。
  • 您可以为两条消息使用不同的变量名。然后最后将两个变量都发送到模板。

标签: python django django-templates jinja2 backend


【解决方案1】:
  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 %}

之后

希望它有效....

【讨论】:

  • 您好,感谢您的回答,但我之前尝试过,它只是循环显示消息并单独显示其字符
猜你喜欢
  • 2016-05-22
  • 1970-01-01
  • 2018-06-23
  • 2015-04-09
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
相关资源
最近更新 更多