類似のレイアウトを必要とするオブジェクトのリストがオブジェクトのクラスに基づいて設定されている必要がある場合クラスなどxxの値はテンプレート内では使用できません。私はここに欠けている別のアプローチは、おそらくありDjangoテンプレート内のオブジェクトのクラスを取得するにはどうすればよいですか?
{% for obj in objects %} <div class={{obj.__class__.__name__}} .. </div> {% endfor }}
..
類似のレイアウトを必要とするオブジェクトのリストがオブジェクトのクラスに基づいて設定されている必要がある場合クラスなどxxの値はテンプレート内では使用できません。私はここに欠けている別のアプローチは、おそらくありDjangoテンプレート内のオブジェクトのクラスを取得するにはどうすればよいですか?
{% for obj in objects %} <div class={{obj.__class__.__name__}} .. </div> {% endfor }}
..
少し汚れソリューション
オブジェクトがモデルに属しているクエリセットである場合は、あなたがにカスタムメソッドを追加することができますあなたのモデル。
class mymodel(models.Model):
foo = models........
def get_cname(self):
class_name = ....
return class_name
その後、テンプレートであなたが試すことができます:
{% for obj in objects %}
<div class="{{obj.get_cname}}">
..
</div>
{% endfor }}
ます。また、カスタムフィルタを書くことができます。私のuse caseは、Djangoフォームのhtml要素がチェックボックスかどうかをチェックすることでした。このコードはDjango 1.4でテストされています。
私は約Custom Filtersの指示に従った。私のフィルタコードはそのように見えます。 myapp/templatetags/class_tag.py
で
:あなたのテンプレートファイルで
from django import template
register = template.Library()
@register.filter(name='get_class')
def get_class(value):
return value.__class__.__name__
:
{% load class_tag %}
{% if Object|get_class == 'AClassName' %}
do something
{% endif %}
{{ Object|get_class }}
これはより良い解決策です –
ビット単純。単一モデルのリストは、あなたのレイアウトをされたと仮定すると:
その後class ObjectListView(ListView):
model = Person
template_name = 'object_list.html'
def model_name(self):
return self.model._meta.verbose_name
object_list.html
に:あなたは、これはいくつかのクラスのために必要がある場合は、カスタムフィルタの
{% for obj in object_list %}
<div class="{{view.model_name}}">...</div>
{% endfor }}
Davidの提案は素晴らしいです。
Djangoのドキュメントはdevサーバが新しいtemplatetagsを自動的に検出しないことを無視しています。私が手動で再起動するまでは、TemplateSyntaxError class_tag is not a registered tag library
がついていました。
。
ええ、ありがとう - それは私が思い付いたものです。 –