django 在POST调用时将复杂对象从模板传递到www.example.com的更好选择views.py

b5lpy0ml  于 2023-03-31  发布在  Go
关注(0)|答案(1)|浏览(108)

在views.py的GET调用中,我创建了一个随机问题列表(* 它是一个复杂对象,字典列表 *),并使用return render(request, 'some_page.html', args)将该列表发送到模板(HTML)文件。
我一次显示一个问题,一旦用户输入答案并单击“下一步”,下一个问题就会显示出来,依此类推。每次单击“下一步”时,答案都必须存储回数据库中。
如何将答案发送到后台,同时将用户引导到下一个问题?这里需要注意的一件重要事情是,一旦生成了问题列表,我就不能再生成它。我必须将该列表保存在某个地方以用于此示例,或者在每次调用时将其传递给views.py和模板。我认为在每次调用时传递列表不是一个理想的解决方案,并寻找更好的建议。我用HTML一个接一个地显示问题,并且有一个当前索引变量,我使用JS管理。
下面是我在www.example.com中的GET函数的结尾views.py:

final_data = [very, complicatedly, ordered, list]
    final_data = json.dumps(final_data)    
    args = {"data":final_data}
    return render(request, 'index.html', args)
m528fe3b

m528fe3b1#

我的回答是:我会使用 AJAX (javascript),点击-〉post -〉success +下一个问题
根据渲染中的json.dumps(),更容易显示块:
如果你只是使用像{{data.0}}

<!-- `i` being the question text -->
{% for i in data %}
  <div id="question_{{ forloop.counter }}" hidden>{{i}}</div>
{% endfor %}

你不需要做json.dumps()
我唯一能看到需要json.dumps()的情况是,如果您立即在JavaScript中管道化值,如

<html>
  <head>
    <title> Example </title>

    <script>
      myComplicatedList = JSON.parse('{{data}}');
    </script>

  </head>
</html

在这种情况下,你需要将Python数组转换为Javascript数组。
我不知道你是如何在模板中使用data的,但我想我只是把它扔在那里。
旁注:Idk if 1存储数据的方法更好。我个人喜欢隐藏的Div,而不是Javascript Vars,但它确实增加了用户发现和更改它们的风险(在我的使用中概率很低)

相关问题