1

アプリのモデル ファイルに次の辞書があります。

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', 'Gift Wishlist') を返します。

だから私はそれが何をしているのか理解できます(この場合、dict.typeは1に等しく、「買い物リスト」を返すはずですが、[1] - 2番目、リストの要素を返します)。私が理解していないのは、Pythonシェルでまったく同じことをすると異なる結果が得られる理由です。

私がdjango( TYPE_DICT[dict.type] )で行うようにすると、上記のように機能し、Pythonシェルでエラーが発生します。Python シェルで 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シェルで何か間違ったことをしたか、違うことをしました。私がしたことは:

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

ここで何が問題なのですか?

アラン

4

4 に答える 4

6

モデル ファイル内の は辞書ではありませTYPE_DICTん。タプルのタプルです。

必要に応じて、辞書を簡単に作成できます。

TYPE_DICT_DICT = dict(TYPE_DICT)

TYPE_DICT_DICTその後、実際の辞書として使用できます。

于 2009-09-05T21:02:22.780 に答える
0

こんにちは、私は昨日からこれをやろうとしていましたが、今日、辞書キー (データベースに保存されている) を渡すことができるように、独自のフィルターを作成できることに気付きました。

これを状態で機能させようとしていましたが、これを多くのモデルで使用しているため、設定に追加して次のようにしました。

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 は、テンプレートに渡す変数です

これが他の人に役立つことを願っています

于 2012-01-09T23:57:46.843 に答える
0

まず、タプルを辞書形式に変更します..次に、djangoテンプレートにアクセスするときに、その辞書のキーを属性として想定する必要があります...これが辞書であるとしましょう

TYPE_DICT = {
    1: 'Shopping list',
    2: 'Gift Wishlist',
    3: 'test list type',
}

django テンプレートでこの辞書にアクセスするときは、次のように使用する必要があります

TYPE_DICT.1
于 2009-09-06T03:04:33.243 に答える
-1

辞書ではなく、タプルを作成しています。

TYPE_DICT = {
    1: "Shopping list",
    2: "Gift Wishlist",
    3: "test list type",
}

口述です(しかし、それは選択肢が望んでいるものではありません)。

于 2009-09-05T21:03:35.980 に答える