Django模板中的IsInstance?

Lud*_*udo 7 django django-templates

有没有办法在Django模板中执行isinstance/issubclass?我意识到我可以编写自己的模板标签,但我很惊讶这不可能让我觉得我做错了什么或者遗漏了一些明显的东西.

我希望显示两个不同的标记段,具体取决于我在我的集​​合中迭代时显示的项目类型.谢谢!

ppe*_*rid 9

我认为这里的简单模板过滤器最适合.它实现起来非常快速且易于调用.像这样的东西:

在templatetags/my_filters.py中:

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]))
Run Code Online (Sandbox Code Playgroud)

在您的模板中:

{% load my_filters %}

...

{% if myvar|isinst:"mymodule.MyClass" %}
...do your stuff
{% endif %}
Run Code Online (Sandbox Code Playgroud)

虽然以上是示例代码(未经测试),但我相信它应该可行.有关自定义模板过滤器的更多信息,请参阅django文档

编辑:编辑答案,以显示过滤器参数实际上是一个字符串,而不是一个python类


Dan*_*man 7

如果所有这些都继承自公共基类型,但您需要知道它是哪种类型,您可能只想在返回类型的基础上实现一个方法 - 然后您可以if foo.get_type == 'type1'在模板中调用(或其他).