26

モデルがあるとします:

from django.db import models

class Test(models.Model):
    name=models.CharField(max_length=255, verbose_name=u'custom name')

テンプレートでモデルのフィールドの詳細な名前を取得するにはどうすればよいですか? 以下は機能しません。

{{ test_instance.name.verbose_name }}

テンプレートで label 属性を使用して、フォームを使用するときと同じように、解決策を非常に高く評価します。

{{ form_field.label }}
4

4 に答える 4

61

これには次のPythonコードを使用できます

Test._meta.get_field("name").verbose_name.title()

これをテンプレートで使用する場合は、このためのテンプレートタグを登録することをお勧めします。templatetags2つのファイル(__init__.pyおよび)を含むフォルダーをアプリ内に作成します。verbose_names.py次のコードを次のように入力しverbose_names.pyます。

from django import template
register = template.Library()

@register.simple_tag
def get_verbose_field_name(instance, field_name):
    """
    Returns verbose_name for a field.
    """
    return instance._meta.get_field(field_name).verbose_name.title()

これで、次のようにライブラリをロードした後、テンプレートでこのテンプレートタグを使用できます。

{% load verbose_names %}
{% get_verbose_field_name test_instance "name" %}

Custom template tags公式のdjangoドキュメントで読むことができます。

于 2013-01-24T10:21:52.213 に答える
9

受け入れられた答えの方法は素晴らしいです!

フィールドリストを生成したい場合は、これが好きかもしれません。

クラス Test に iterable を追加すると、フィールドの詳細な名前と値を一覧表示するのに便利です。

モデル

class Test(models.Model):
...
def __iter__(self):
    for field in self._meta.fields:
        yield (field.verbose_name, field.value_to_string(self))

テンプレート

{% for field, val in test_instance %}
<div>
    <label>{{ field }}:</label>
    <p>{{ val }}</p>
</div>
{% endfor %}
于 2014-03-07T08:15:46.247 に答える
0

おそらく答えには遅すぎますが、form.py(self.fields['fieldname'] = ..)のフィールドをオーバーライドして問題を引き起こしたことに気付くまで、同じ問題がありました。そうする場合は、ラベルも設定する必要があります。それ以外の場合は、フィールド名から派生したラベルが使用されます。

この迅速な返信が理にかなっていることを願っています。

于 2021-07-27T16:51:10.880 に答える