簡體   English   中英

如何在Django模板中組合QuerySet和Dictionary?

[英]How to combine a QuerySet and a Dictionary in Django Template?

我有一個Django的模型對象,看起來像這樣:

class myObj(models.Model):
    A = models.TextField()
    B = models.DateField()      
    C = models.ForeignKey(User)

我正在獲得像myObjs的querySet:

mList = myObj.objects.all()

我也有一個用戶字典,看起來像這樣:

uDict = {1: "Hello", 2: "World"}  //The keys of this dictionary correspond to the field myObj.C

在我看來,我正在使用上下文將mList和uList發送到我的HTML模板。

在我的模板中,我想在單獨的行中列出所有mLists。 在uDict中具有匹配的User條目的那些mList應該與uList中的匹配值一起出現。

我應該怎么做? 在模板中,我可以輕松地遍歷mList。 但是我不知道如何將myObj.C與uDict鍵匹配。 我知道這行不通:

{% for currObj in mList %}
    {{currObj.A}} {{currObj.B}} {{uDict.currObj.C}}
{% endfor %} 

...因為uDict.currObj.C無法正確評估。

那么做我想做的最好的方法是什么?

不幸的是,您不能使用for循環變量作為Django中字典的鍵。

您可以做的是將它們全部打包在某個列表或其他數據集中。 像這樣:

mList = myObj.objects.all()
uDict = {1: "Hello", 2: "World"}

data_for_template = []
for i in range(len(mList)):
    data_for_template.append(
        {
            'mListObjA':mList.A,
            'mListObjB':mList.B,
            'uDictObj':uDict[i], # or i+1 for your example uDict
        }
    )

然后,您可以在模板中以類似方式訪問此數據。

{% for item in data_for_template %}
    {{item.mListObjA}} {{item.mListObjB}} {{item.uDictObj}}
{% endfor %}

本質上,您應該嘗試對views.py文件中的數據進行大部分准備工作,以簡化模板中的可訪問性。

編輯:

根據您的評論,我接下來將嘗試以下操作:

views.py:

mList = myObj.objects.all()
uDict = {1: "Hello", 2: "World"}

data_for_template = []
for i in range(len(mList)):
    data_for_template.append(
        {
            'mListObj':mList,
            'uDictObj':uDict[i], # or i+1 for your example uDict
        }
    )

HTML

{% for item in data_for_template %}
    {{item.mListObj.A}} {{item.mListObj.B}} {{item.uDictObj}}
    {{item.mListObj.C.F.G}}
{% endfor %}

{{data_for_template.N.mListObj.C.F.G}} <!-- Where N is the index of whatever Object you wish to access -->

我認為最簡單的方法是將uDict值直接添加到視圖中的myObj實例。 這將為您提供一個列表,而不是上下文中的qs,但這不會對模板造成任何影響。

您認為:

mList = myObj.objects.all()
for my_obj in mList:
    my_obj.user = uDict.get(my_obj.C)

這會將用戶值添加到內存實例中,因此在模板中可以獲取currObj.user

暫無
暫無

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

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