迭代模板中的模型實(shí)例字段名稱和值我正在嘗試創(chuàng)建一個(gè)基本模板來顯示所選實(shí)例的字段值及其名稱。可以將其視為表格格式中該實(shí)例值的標(biāo)準(zhǔn)輸出,其中第一列中的字段名稱(特別是如果在字段上指定了verbose_name)和第二列中該字段的值。例如,假設(shè)我們有以下模型定義:class Client(Model):
name = CharField(max_length=150)
email = EmailField(max_length=100, verbose_name="E-mail")我希望它在模板中輸出如此(假設(shè)具有給定值的實(shí)例):Field Name Field Value---------- -----------Name Wayne KoortsE-mail waynes@email.com我想要實(shí)現(xiàn)的是能夠?qū)⒛P偷膶?shí)例傳遞給模板,并能夠在模板中動(dòng)態(tài)迭代它,如下所示:<table>
{% for field in fields %}
<tr>
<td>{{ field.name }}</td>
<td>{{ field.value }}</td>
</tr>
{% endfor %}</table>是否有一個(gè)整潔,“Django批準(zhǔn)”的方式來做到這一點(diǎn)?這似乎是一項(xiàng)非常常見的任務(wù),我需要經(jīng)常為這個(gè)特定的項(xiàng)目做這件事。
3 回答

狐的傳說
TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以使用Django的to-python queryset序列化程序。
只需在您的視圖中輸入以下代碼:
from django.core import serializers data = serializers.serialize( "python", SomeModel.objects.all() )
然后在模板中:
{% for instance in data %} {% for field, value in instance.fields.items %} {{ field }}: {{ value }} {% endfor %}{% endfor %}
它的巨大優(yōu)勢(shì)在于它處理關(guān)系字段。
對(duì)于字段子集,請(qǐng)嘗試:
data = serializers.serialize('python', SomeModel.objects.all(), fields=('name','size'))

千萬(wàn)里不及你
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
最后在dev郵件列表上找到了一個(gè)很好的解決方案:
在視圖中添加:
from django.forms.models import model_to_dictdef show(request, object_id): object = FooForm(data=model_to_dict(Foo.objects.get(pk=object_id))) return render_to_response('foo/foo_detail.html', {'object': object})
在模板中添加:
{% for field in object %} <li><b>{{ field.label }}:</b> {{ field.data }}</li>{% endfor %}
添加回答
舉報(bào)
0/150
提交
取消