有没有办法在 Django 模板中执行 isinstance/issubclass 操作?我意识到我可以编写自己的模板标签,但令我惊讶的是这不可能,这让我觉得我要么做错了什么,要么遗漏了一些明显的东西。
我希望显示两个不同的标记部分,具体取决于我在迭代集合时显示的项目类型。谢谢!
我认为这里的简单模板过滤器最适合。它的实施速度非常快并且易于调用。像这样的东西:
在 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]))
在你的模板中:
{% load my_filters %}
...
{% if myvar|isinst:"mymodule.MyClass" %}
...do your stuff
{% endif %}
虽然上面是示例代码(未经测试),但我相信它应该可以工作。
有关自定义模板过滤器的更多信息,请参阅Django 文档
EDIT:编辑答案以显示过滤器参数实际上是一个字符串而不是 python 类
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)