62👍
You can use following python code for this
Test._meta.get_field("name").verbose_name.title()
If you want to use this in template then it will be best to register template tag for this. Create a templatetags
folder inside your app containing two files (__init__.py
and verbose_names.py
).Put following code in 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()
Now you can use this template tag in your template after loading the library like this:
{% load verbose_names %}
{% get_verbose_field_name test_instance "name" %}
You can read about Custom template tags
in official django documentation.
9👍
The method in the accepted answer is awesome!
And maybe you’ll like this if you want to generate a field list.
Adding an iterable to the class Test makes it convenient to list fields’ verbose name and value.
Model
class Test(models.Model):
...
def __iter__(self):
for field in self._meta.fields:
yield (field.verbose_name, field.value_to_string(self))
Template
{% for field, val in test_instance %}
<div>
<label>{{ field }}:</label>
<p>{{ val }}</p>
</div>
{% endfor %}
- [Django]-Creating email templates with Django
- [Django]-Nginx doesn't serve static
- [Django]-How to hide some fields in django-admin?
1👍
based on this answer https://stackoverflow.com/a/14498938 .in Django Model i added
class Meta:
app_name = 'myapp'
in listview i have
from django.core import serializers
context['data'] = serializers.serialize( "python", self.get_queryset() )
inside mylist.html i have
{% for field, value in data.0.fields.items %}
<th style="text-align:center;">{% get_verbose_field_name data.0.model field %}</th>
{% endfor %}
in filter:
from django import template
register = template.Library()
from .models import Mymodel
@register.simple_tag
def get_verbose_field_name(instance, field_name):
"""
Returns verbose_name for a field.
"""
myinstance = eval(instance.split('.')[1].title())
return myinstance._meta.get_field(field_name).verbose_name.title()
instance in the abbove filter for the specific example is myapp.mymodel i evalute instance into model object and the i return field verbose name
it works in django 1.9
- [Django]-Django Model Field Default to Null
- [Django]-CSRF validation does not work on Django using HTTPS
- [Django]-In a Django QuerySet, how to filter for "not exists" in a many-to-one relationship
0👍
It’s probably too late for an answer but I had the same issue until I realised that I caused the problem by overriding the fields in the form.py (self.fields[‘fieldname’] = ..). If you do that you also need to set a label otherwise it uses a label derived from the fieldname.
Hope this quick reply makes sense.
- [Django]-Django template system, calling a function inside a model
- [Django]-Testing email sending in Django
- [Django]-Django: How to check if the user left all fields blank (or to initial values)?