2011-07-04 15 views
31

Czy istnieje sposób na uzyskanie nazwy modelu dowolnego obiektu w szablonach django. Ręcznie, możemy spróbować, definiując metody w modelach lub używając znaczników szablonów ... Ale czy istnieje jakiś wbudowany sposób?Nazwa modelu obiektów w szablonach django

Odpowiedz

48

object.__class__.__name__ lub object._meta.object_name powinien podać nazwę klasy modelu. Jednak ten nie może być używany w szablonach, ponieważ nazwy atrybutów zaczynają się od podkreślenia.

Nie ma wbudowanego sposobu, aby uzyskać tę wartość z szablonów, więc musisz zdefiniować metodę modelu, która zwraca ten atrybut, lub dla bardziej ogólnego/wielokrotnego użytku, użyj filtra szablonu:

@register.filter 
def to_class_name(value): 
    return value.__class__.__name__ 

które można użyć w szablonie jako:

{{ obj | to_class_name }} 
+0

Ok .. Dzięki Shawn dla reply.I wykorzystywane w ten sposób, myśl może być jakiś wbudowany w sposób! ! – Neo

+0

Nie sądzę, że potrzeba tego jest dość powszechna, aby zagwarantować wbudowane podejście. Jeśli potrzebujesz go wystarczająco często, możesz utworzyć klasę abstrakcyjną, która implementuje metodę, a następnie użyć jej jako podstawy dla wszystkich modeli. Osobiście jednak będę trzymać się za pomocą znacznika filtra. –

+0

Ok .. Dzięki Shawn. – Neo

5

nie można uzyskać dostępu do nazwy klasy bezpośrednio. Robi coś takiego:

{{ object.__class__ }} 

spowoduje TemplateSyntaxError: Variables and attributes may not begin with underscores. Django nie pozwala na dostęp do tego rodzaju atrybutów - konwencje Python oznaczają, że są ukrytymi szczegółami implementacji, a nie częścią interfejsu API obiektu.

Utwórz filtr szablonu zamiast, a następnie można go używać w następujący sposób:

{{ object|model_name_filter }} 

tworzenia filtrów jest bardzo proste: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

-1

Od wersji 1.2 i może być wcześnie Django ma atrybut opts w szablony. Atribute jest link do model._meta dowodów zalecana look at source code into Github

on używany do szablonu bardzo prosta: {{opts}} lub {{opts.db_table}}

+3

To tylko dla django-admin. –

Powiązane problemy