迭代模板中的模型實例字段名稱和值我正在嘗試創建一個基本模板來顯示所選實例的字段值及其名稱??梢詫⑵湟暈楸砀窀袷街性搶嵗档臉藴瘦敵?,其中第一列中的字段名稱(特別是如果在字段上指定了verbose_name)和第二列中該字段的值。例如,假設我們有以下模型定義:class Client(Model):
name = CharField(max_length=150)
email = EmailField(max_length=100, verbose_name="E-mail")我希望它在模板中輸出如此(假設具有給定值的實例):Field Name Field Value---------- -----------Name Wayne KoortsE-mail [email protected]我想要實現的是能夠將模型的實例傳遞給模板,并能夠在模板中動態迭代它,如下所示:<table>
{% for field in fields %}
<tr>
<td>{{ field.name }}</td>
<td>{{ field.value }}</td>
</tr>
{% endfor %}</table>是否有一個整潔,“Django批準”的方式來做到這一點?這似乎是一項非常常見的任務,我需要經常為這個特定的項目做這件事。
3 回答

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
您可以使用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 %}
它的巨大優勢在于它處理關系字段。
對于字段子集,請嘗試:
data = serializers.serialize('python', SomeModel.objects.all(), fields=('name','size'))

千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
最后在dev郵件列表上找到了一個很好的解決方案:
在視圖中添加:
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 %}
添加回答
舉報
0/150
提交
取消