Как передать определенное значение внутри кортежа, который также является кортежем в Python в Django?
У меня есть словарь Categories, который является кортежем внутри кортежа, однако я хочу изолировать только литералы --> названия категорий
from django.db import models
CATEGORIES = (
('a', 'Clothing'),
('b', 'Electronics'),
('c', 'Furniture'),
('d', 'Kitchen'),
('e', 'Miscellaneous'),
('f', 'None'),
)
но в другом файле views.py есть следующее
def show_category_listings(request, category):
listings = Listing.objects.filter(category__in = category[0])
cat = dict(CATEGORIES)
return render(request, 'auctions/categSpecific.html', {
"listings": listings,
"category": cat[category]
})
и, наконец, в html есть следующее
<li>Category: {{ listing.category }}</li>
но я вижу только буквы вместо имен.
смотрите в html
есть ли способ получить только названия категорий? Я не смог разобраться с передачей значений в части views.py.
В Django есть несколько магических методов. Одним из них является get_FOO_display ()
, который отображает значение поля в человекочитаемом формате.
Следующий код отображает значение имени в поле выбора.
<li>Category: {{ listing.get_category_display }}</li>
Прочитайте документацию здесь: https://docs.djangoproject.com/en/3.2/ref/models/instances/#django.db.models.Model.get_FOO_display
Задайте это в шаблоне?
"category_names" : [ x[1] for x in CATEGORIES]
или даже
"category_lookup" : { x[0]:x[1] for x in CATEGORIES }
Также смотрите документацию (get_FOO_display()
). Модели Django включают методы для перевода из значения поля модели в человекочитаемую форму. Вы можете вызвать этот метод модели из шаблона как
{{ instance.get_fieldname_display }}