Как вызвать функцию как контекст в django
class User(AbstractUser):
GENDER_STATUS = (
('M', 'Male'),
('F', 'Female')
)
address = models.TextField(null=True, blank=True)
age = models.PositiveIntegerField(null=True, blank=True)
description = models.TextField(null=True, blank=True)
gender = models.CharField(max_length=1, choices=GENDER_STATUS, null=True, blank=True)
phone = models.CharField(max_length=15, null=True, blank=True)
def get_full_name(self):
return f'{self.first_name} {self.last_name}'
я объявляю функцию get_full_name и затем я хочу вызвать ее в моем представлении и показать ее в моем шаблоне. вот мое представление
from django.shortcuts import render
from accounts.models import User
def about_us(request):
fullname = User.get_full_name
context = {
'fullname': fullname
}
return render(request, 'about_us.html', context=context)
а это мой шаблон, как вы можете видеть, я использовал цикл для контекста
<div class="container">
<div class="d-flex flex-wrap justify-content-around">
{% for foo in fullname %}
<p>{{ foo }}</p>
{% endfor %}
</div>
</div>
но я не могу получить параметры get_full_name
в моем шаблоне как значение тоже показать. я буду более чем счастлив, если кто-то поможет мне. СПАСИБО!
Вы должны объявить get_full_name()
как свойство, а не метод, так:
models.py:
class User(AbstractUser):
GENDER_STATUS = (
('M', 'Male'),
('F', 'Female')
)
address = models.TextField(null=True, blank=True)
age = models.PositiveIntegerField(null=True, blank=True)
description = models.TextField(null=True, blank=True)
gender = models.CharField(max_length=1, choices=GENDER_STATUS, null=True, blank=True)
phone = models.CharField(max_length=15, null=True, blank=True)
@property
def get_full_name(self):
return f'{self.first_name} {self.last_name}'
views.py:
from django.shortcuts import render
from accounts.models import User
def about_us(request):
objs = User.objects.all()
context = {
'records': objs
}
return render(request, 'about_us.html',context)
Файл шаблона:
<div class="container">
<div class="d-flex flex-wrap justify-content-around">
{% for foo in records %}
<p>{{ foo.get_full_name }}</p>
{% endfor %}
</div>
</div>
Все работает нормально, кроме вызова вашей функции,
fullname = User.get_full_name
Должно быть:
fullname = User.get_full_name()