【问题标题】:django {% url %} with parameters (list of dicts)django {% url %} 带参数(字典列表)
【发布时间】:2016-11-26 18:28:21
【问题描述】:

我正在遵循以下建议:Refresh <div> element generated by a django template

我传递了一些变量,一个啦:

url: '{% url 'search_results' 'sched_dep_local' flights|escapejs %}',

问题在于“航班”是 search_results 模板需要访问的字典列表,它非常大并且包含诸如撇号之类的内容

[{'foo': 'bar'}, {'foo': 'baz'}] and so on

所以我可以将它与 {% url %} 一起使用的唯一方法似乎是使用 escapejs 来摆脱撇号,但是在 view.py 中,我需要它再次成为一个字典列表,所以我可以执行以下操作:

def search_results(request, sort_key, flights):
    flights = search_utils.sort(flights, sort_key)
    return render_to_response('search_results.html', { 'flights' : flights} )                                                                                                                                    

有没有简单的方法来做到这一点?或者,我对这整件事的看法都错了吗?

ETA:另请参阅(解释我想要做什么以及为什么):

<script>
$(".sort").on("click", function() {
    $.ajax({
        url: '{% url 'search_results' 'sched_dep_local' flights|escapejs %}',
        success: function(data) {
            $('#search-results').html(data);
        }
    });
});
</script>

我有一个模板(在 search_results.html 中),可以打印航班中每个航班的一些数据。我想对该数据进行排序并重新渲染模板,但我不知道如何。

【问题讨论】:

  • 为什么需要将字典列表作为变量传递给 url?无论你想达到什么目标,我相信有更好的方法。
  • 帖子已更新详细信息。你能推荐一个更好的方法吗?

标签: python django


【解决方案1】:

这不是处理复杂数据的正确方法。而不是通过 URL 发送它,您应该使用 POST 并将其发送到请求的正文中:由于您使用的是 jQuery,您可以在该调用中执行 method: "POST"。在后端,您可以从 JSON 反序列化它。

但是,这样做似乎有点奇怪;数据显然已经来自 Django 后端,所以不清楚你为什么要将它发回那里。

【讨论】:

  • 我希望能够在不刷新页面的情况下单击按钮并对数据进行排序。我想不出更好的方法来做到这一点。
  • 为什么需要将它发送给 Django 以便对其进行排序? Javascript 完全能够对数据进行排序。
  • 问题不在于排序。这是刷新模板。我需要重新渲染使用排序数据的模板。
  • 为什么需要刷新模板呢?你已经渲染了所有的 HTML 元素;你只需要移动它们。 jQuery 已经有了所有相关的方法。
  • 您能详细说明一下吗?我不确定你的意思。
猜你喜欢
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2015-12-21
  • 2017-11-16
  • 2012-12-19
  • 2020-05-07
  • 2012-11-13
相关资源
最近更新 更多