Django模板渲染嵌套字典与元组。

huangapple go评论110阅读模式
英文:

Django template render a nested dict with tuples

问题

这里是我的字典 =
基本上是一个字典的字典的元组列表。

我想通过Django模板渲染的是:
但我无法做到,这是我当前的Django模板:

上面的代码渲染出来是:

英文:

Here's my dict =

  1. {
  2. '123': {'metric_1': [('url_1', 'caption_1'), ('url_2', 'caption_2'), ('url_3', 'caption_3'), ('url_4', 'caption_4')], 'metric_2': [('url_1', 'caption_1'), ('url_2', 'caption_2'), ('url_3', 'caption_3'), ('url_4', 'caption_4')]},
  3. '456': {'metric_1': [('url_1', 'caption_1'), ('url_2', 'caption_2'), ('url_3', 'caption_3'), ('url_4', 'caption_4')], 'metric_2': [('url_1', 'caption_1'), ('url_2', 'caption_2'), ('url_3', 'caption_3'), ('url_4', 'caption_4')]},
  4. '789': {'metric_1': [('url_1', 'caption_1'), ('url_2', 'caption_2'), ('url_3', 'caption_3'), ('url_4', 'caption_4')], 'metric_2': [('url_1', 'caption_1'), ('url_2', 'caption_2'), ('url_3', 'caption_3'), ('url_4', 'caption_4')]},
  5. }

it basically is a dict of a dict of a list of tuples.

what I'd like to render via Django template is:

  1. 123
  2. metric_1
  3. url_1 url_2 url_3 url_4
  4. caption_1 caption_2 caption_3 caption_4
  5. metric_2
  6. url_1 url_2 url_3 url_4
  7. caption_1 caption_2 caption_3 caption_4
  8. 456
  9. metric_1
  10. url_1 url_2 url_3 url_4
  11. caption_1 caption_2 caption_3 caption_4
  12. metric_2
  13. url_1 url_2 url_3 url_4
  14. caption_1 caption_2 caption_3 caption_4
  15. 789
  16. metric_1
  17. url_1 url_2 url_3 url_4
  18. caption_1 caption_2 caption_3 caption_4
  19. metric_2
  20. url_1 url_2 url_3 url_4
  21. caption_1 caption_2 caption_3 caption_4

but I'm not able to do so, here's my current Django template:

  1. <div class="grid grid-cols-2 gap-2 p-2">
  2. {% for one_analysis_id, all_metrics in url_dict.items %}
  3. <table>
  4. <tr><p>Analysis ID: {{ one_analysis_id }}</p></tr>
  5. {% for metric_name, url_and_caption_tuple_list in all_metrics.items %}
  6. <tr><p>{{ metric_name }}</p></tr>
  7. <tr>
  8. {% for url_and_caption_tuple in url_and_caption_tuple_list %}
  9. <td><img width="350" height="300" src="{{ url_and_caption_tuple.0 }}"><div>{{ url_and_caption_tuple.1 }}</div></td>
  10. {% endfor %}
  11. </tr>
  12. {% endfor %}
  13. </table>
  14. {% endfor %}
  15. </div>

What the above code renders is:

  1. 123
  2. metric_1
  3. metric_2
  4. url_1 url_2 url_3 url_4
  5. caption_1 caption_2 caption_3 caption_4
  6. url_1 url_2 url_3 url_4
  7. caption_1 caption_2 caption_3 caption_4
  8. 456
  9. metric_1
  10. metric_2
  11. url_1 url_2 url_3 url_4
  12. caption_1 caption_2 caption_3 caption_4
  13. url_1 url_2 url_3 url_4
  14. caption_1 caption_2 caption_3 caption_4
  15. 789
  16. metric_1
  17. metric_2
  18. url_1 url_2 url_3 url_4
  19. caption_1 caption_2 caption_3 caption_4
  20. url_1 url_2 url_3 url_4
  21. caption_1 caption_2 caption_3 caption_4

Could anyone please provide any insight?

Thanks!

答案1

得分: 1

这里是您要求的代码部分的翻译:

  1. <div class="grid grid-cols-2 gap-2 p-2">
  2. {% for one_analysis_id, all_metrics in url_dict.items %}
  3. <table class="table">
  4. <tr><th>Analysis ID: {{ one_analysis_id }}</th></tr>
  5. {% for metric_name, url_and_caption_tuple_list in all_metrics.items %}
  6. <tr><th>{{ metric_name }}</th></tr>
  7. <tr>
  8. {% for url_and_caption_tuple in url_and_caption_tuple_list %}
  9. <td>{{ url_and_caption_tuple.0 }}</td>
  10. {% endfor %}
  11. </tr>
  12. <tr>
  13. {% for url_and_caption_tuple in url_and_caption_tuple_list %}
  14. <td>{{ url_and_caption_tuple.1 }}</td>
  15. {% endfor %}
  16. </tr>
  17. {% endfor %}
  18. </table>
  19. {% endfor %}
  20. </div>

请注意,这是原始HTML代码,其中包含了HTML实体编码(如<>)以及模板标记(如{% ... %}{{ ... }})。

英文:

I am not promoting this way of doing it, but it is a working solution:

  1. <div class="grid grid-cols-2 gap-2 p-2">
  2. {% for one_analysis_id, all_metrics in url_dict.items %}
  3. <table class="table">
  4. <tr><th>Analysis ID: {{ one_analysis_id }}</th></tr>
  5. {% for metric_name, url_and_caption_tuple_list in all_metrics.items %}
  6. <tr><th>{{ metric_name }}</th></tr>
  7. <tr>
  8. {% for url_and_caption_tuple in url_and_caption_tuple_list %}
  9. <td>{{ url_and_caption_tuple.0 }}</td>
  10. {% endfor %}
  11. </tr>
  12. <tr>
  13. {% for url_and_caption_tuple in url_and_caption_tuple_list %}
  14. <td>{{ url_and_caption_tuple.1 }}</td>
  15. {% endfor %}
  16. </tr>
  17. {% endfor %}
  18. </table>
  19. {% endfor %}
  20. </div>

As I said already in the comments, this would better be handled inside of the view's logic and be passed to the template in an easily digestible format.

huangapple
  • 本文由 发表于 2023年5月25日 05:21:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/76327478.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定