我在我的应用模型文件中有这个词典:
TYPE_DICT = (
("1", "Shopping list"),
("2", "Gift Wishlist"),
("3", "test list type"),
)
使用此词典的模型是这样的:
class List(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=200)
type = models.PositiveIntegerField(choices=TYPE_DICT)
我想在我的视图中重复使用它并从apps.models导入它。我正在创建一个在我的视图中使用的字典列表,如下所示:
bunchofdicts = List.objects.filter(user=request.user)
array = []
for dict in bunchofdicts:
ListDict = {'Name':dict.name, 'type':TYPE_DICT[dict.type], 'edit':'placeholder' }
array.append(ListDict)
当我在我的模板中使用此列表时,它给了我非常奇怪的结果。 它没有返回我的列表类型(购物清单),而是返回我('2','礼品愿望清单')。
所以我可以理解它在做什么(在这种情况下,dict.type等于1,它应该返回我“购物清单”,但它返回我[1] - 秒,列表中的元素)。我不明白,为什么在python shell中做同样的事情会产生不同的结果。
按照我在django中的方式(TYPE_DICT [dict.type])进行操作,如上所述工作并在python shell中创建错误。在python shell中使用TYPE_DICT [str(dict.type)]工作正常,但在django中创建了这个错误:
TypeError at /list/
tuple indices must be integers, not str
Request Method: GET
Request URL: http://127.0.0.1/list/
Exception Type: TypeError
Exception Value:
tuple indices must be integers, not str
Exception Location: /home/projects/tst/list/views.py in list, line 22
Python Executable: /usr/bin/python
Python Version: 2.6.2
也许我在python shell中做了错误或不同的事情。我做的是:
python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> dict = {'1':'shoppinglist', '2':'giftlist','3':'testlist'}
>>> print dict[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
>>> print dict[str(1)]
shoppinglist
>>> x = 1
>>> print dict[x]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
>>> print dict[str(x)]
shoppinglist
>>>
所以这里有什么问题?
艾伦
答案 0 :(得分:6)
模型文件中的TYPE_DICT
不是字典:它是元组的元组。
如果您愿意,可以轻松地从中制作字典:
TYPE_DICT_DICT = dict(TYPE_DICT)
然后你可以使用TYPE_DICT_DICT
作为真正的字典。
答案 1 :(得分:0)
首先,将您的元组修改为字典格式.. 然后,当在django模板中访问时,你需要假设该字典的键作为属性...让我们说这是字典
TYPE_DICT = {
1: 'Shopping list',
2: 'Gift Wishlist',
3: 'test list type',
}
在django模板中访问此词典时,您应该像这样使用
TYPE_DICT.1
答案 2 :(得分:0)
你好,我从昨天起就试图这样做,今天我意识到你可以make your own filter,以便你可以传递字典密钥(存储在数据库中)。
我试图让这个与州合作,因为我在很多模型中使用它,我将它添加到设置中,所以它是这样的:
在settings.py 中
...
CSTM_LISTA_ESTADOS = (
('AS','Aguascalientes'),
('BC','Baja California'),
...
('YN','Yucatan'),
('ZS','Zacatecas')
)
...
在我的customtags.py
中@register.filter(name='estado')
def estado(estado):
from settings import CSTM_LISTA_ESTADOS
lista_estados = dict(CSTM_LISTA_ESTADOS)
return lista_estados[estado]
在我的模板basicas.html
中{{oportunidad.estado|estado}}
oportunidad是我传递给模板的变量
希望这有助于其他人
答案 3 :(得分:-1)
你正在创建一个元组,而不是一个字典。
TYPE_DICT = {
1: "Shopping list",
2: "Gift Wishlist",
3: "test list type",
}
是一个词典(但这不是选择所需要的)。