簡體   English   中英

如何在 django 的模板中組裝變量名以使用來自 JSONField 的數據?

[英]How to assemble the variable name to use data from JSONField inside the Template in django?

我正在嘗試使用 Django 框架為電視劇建立一個網站,我在 models.py 中放入了關於該節目的各種詳細信息和一個 JSONField(名為“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 的字典(錯誤)

我也試過像這個問題一樣做一個自定義過濾器: How to assemble a variable name in Django templating language? 但看起來發生了同樣的事情:將數字添加到已經加載的 show.episodes 中,這是 JSON 的字典(錯誤)


我知道這看起來很容易,但是兩天來我一直在嘗試找出解決方案但我做不到,所以如果可以的話,請幫助我。 順便說一句,我是個初學者 :)

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 %}

對於不大的詞典來說是可以的。 為了處理更大的字典,我建議使用自定義模板過濾器或標簽。 或者移動處理邏輯查看function。

過濾器和標簽文檔https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/#custom-template-tags-and-filters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM