如何assemble 变量名在django 模板中使用来自JSONField 的数据?
How to assemble the variable name to use data from JSONField inside the Template in django?
我正在尝试使用 Django 框架为电视剧建立一个网站,我在 models.py 中输入了有关该节目的各种详细信息和一个 JSON 字段(名为 'episodes') 来定义每季的季数和剧集数。
示例:{ "1" : 15 , "2" : 25 , "3" : 23}
其中第 1 季包含 15 集,第 2 季包含 25 集,依此类推
当我尝试在正在播放该系列的模板中制作下拉菜单以便用户可以 select 观看该剧集时,问题就开始了:
此代码有效:
Season 1
{% with ''|center:show.episodes.1 as range %}
{% for episode in range %}
Episode {{forloop.counter}}
{% endfor %}
{% endwith %}
Season 2
{% with ''|center:show.episodes.2 as range %}
{% for episode in range %}
Episode {{forloop.counter}}
{% endfor %}
{% endwith %}
Season 3
{% with ''|center:show.episodes.3 as range %}
{% for episode in range %}
Episode {{forloop.counter}}
{% endfor %}
{% endwith %}
但如果我可以在彼此内部使用 2 个 for 循环,一个用于季节,一个用于剧集,这肯定会更清晰,但由于某些原因我无法做到。
我试过了:
{% for season in show.episodes %}
Season {{forloop.counter}}
{% for episode in show.episodes.forloop.counter %}
Episode {{forloop.counter}}
{% endfor %}
{% endfor %}
是的,show.episodes.forloop.counter
线阻止了我。
那绝对行不通,我试过:
{% for season in show.episodes %}
Season {{forloop.counter}}
{% for episode in show.episodes|add:forloop.counter %}
Episode {{forloop.counter}}
{% endfor %}
{% endfor %}
但这不起作用,因为我正在尝试将数字添加到 已经加载的 show.episodes,这是 JSON 的字典(错误)
我也试过像这个问题一样做一个自定义过滤器:
但看起来发生了同样的事情:将数字添加到 already loaded show.episodes 这是 JSON 的字典(错误)
我知道这看起来很容易,但是 2 天来我一直在尝试找出解决方案,但我做不到,所以如果可以,请帮助我。顺便说一句,我是个初学者 :)
show.episodes = { "1" : 15 , "2" : 25 , "3" : 23}
建议以这种方式遍历你的字典:
{% for season, series in show.episodes.items %}
Season {{ season }}
{% for _ in ''|center:series %}
Episode {{forloop.counter}}
{% endfor %}
{% endfor %}
不大的词典还可以。为了处理更大的字典,我建议使用自定义模板过滤器或标签。或者将处理逻辑移到视图函数中。
过滤器和标签文档
https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/#custom-template-tags-and-filters
我正在尝试使用 Django 框架为电视剧建立一个网站,我在 models.py 中输入了有关该节目的各种详细信息和一个 JSON 字段(名为 'episodes') 来定义每季的季数和剧集数。
示例:{ "1" : 15 , "2" : 25 , "3" : 23}
其中第 1 季包含 15 集,第 2 季包含 25 集,依此类推
当我尝试在正在播放该系列的模板中制作下拉菜单以便用户可以 select 观看该剧集时,问题就开始了:
此代码有效:
Season 1
{% with ''|center:show.episodes.1 as range %}
{% for episode in range %}
Episode {{forloop.counter}}
{% endfor %}
{% endwith %}
Season 2
{% with ''|center:show.episodes.2 as range %}
{% for episode in range %}
Episode {{forloop.counter}}
{% endfor %}
{% endwith %}
Season 3
{% with ''|center:show.episodes.3 as range %}
{% for episode in range %}
Episode {{forloop.counter}}
{% endfor %}
{% endwith %}
但如果我可以在彼此内部使用 2 个 for 循环,一个用于季节,一个用于剧集,这肯定会更清晰,但由于某些原因我无法做到。
我试过了:
{% for season in show.episodes %}
Season {{forloop.counter}}
{% for episode in show.episodes.forloop.counter %}
Episode {{forloop.counter}}
{% endfor %}
{% endfor %}
是的,show.episodes.forloop.counter
线阻止了我。
那绝对行不通,我试过:
{% for season in show.episodes %}
Season {{forloop.counter}}
{% for episode in show.episodes|add:forloop.counter %}
Episode {{forloop.counter}}
{% endfor %}
{% endfor %}
但这不起作用,因为我正在尝试将数字添加到 已经加载的 show.episodes,这是 JSON 的字典(错误)
我也试过像这个问题一样做一个自定义过滤器:
我知道这看起来很容易,但是 2 天来我一直在尝试找出解决方案,但我做不到,所以如果可以,请帮助我。顺便说一句,我是个初学者 :)
show.episodes = { "1" : 15 , "2" : 25 , "3" : 23}
建议以这种方式遍历你的字典:
{% for season, series in show.episodes.items %}
Season {{ season }}
{% for _ in ''|center:series %}
Episode {{forloop.counter}}
{% endfor %}
{% endfor %}
不大的词典还可以。为了处理更大的字典,我建议使用自定义模板过滤器或标签。或者将处理逻辑移到视图函数中。
过滤器和标签文档 https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/#custom-template-tags-and-filters