Buradaki basit bir şablon filtresinin, en iyiye uygun olduğunu düşünüyorum. Bunu uygulamak gerçekten hızlı ve kolay. Böyle bir şey: templatetags içinde
/my_filters.py: Şablonunuzdaki
from django import template
from django.utils.importlib import import_module
register = template.Library()
@register.filter
def isinst(value, class_str):
split = class_str.split('.')
return isinstance(value, getattr(import_module('.'.join(split[:-1])), split[-1]))
: Yukarıdaki rağmen
{% load my_filters %}
...
{% if myvar|isinst:"mymodule.MyClass" %}
...do your stuff
{% endif %}
bir örnek kod (test), ben Çalışması gerektiğine inanıyorum. özel şablon Filtreler hakkında daha fazla bilgi için lütfen aşağıya bakınız the django documentation
DÜZENLEME: filtre argümanı aslında bir dize değil,
Hmmm, ben genelde açıklamalarla hemfikir bir piton Sınıf olduğunu göstermek cevabını Düzenlendi, ama bu kadar uzak tuttuğum kadar emin değilim. Kullanım durumum, genel bir taban türü olan, ancak koleksiyonun içinde karıştırılmış öğelerden oluşan bir koleksiyona sahibim. Bir foo bunun gibi görünmeli, bir çubuk benzer bir şekilde, fakat biraz farklı bir şekilde gösterilmelidir. Görüntülenecek biraz farklı alanlar var, dolayısıyla farklı görüntü parçaları, bu yüzden {% if item.field_that_bars_have%} veya benzeri diyebiliriz, ancak bu kötü görünüyor. – Ludo
Bunu işlemenin doğru yolu, özel bir etiket, render_result_item veya doğru görüntü parçasını seçebilecek bir şey oluşturmaktır. Bu şekilde mantık, programcı olmayan/tasarımcımızın onu bulamayacağı bir yere koyma pahasına olsa da, görünüm şablonundan çıkar. Ya da bir isinstance templatetag yazabilirim. Ya da modele bir get_type veya başka bir şey ekleyebilirim. Şimdi katılıyorum - cevabınız için teşekkürler :). – Ludo