首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django模板中的IsInstance?

Django模板中的IsInstance?
EN

Stack Overflow用户
提问于 2011-08-22 22:13:16
回答 3查看 7.2K关注 0票数 9

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

我希望显示两个不同的标记段,这取决于我在集合上迭代时显示的项的类型。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-22 23:11:08

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

票数 8
EN

Stack Overflow用户

发布于 2012-10-07 03:08:29

我认为这里的一个简单的模板过滤器最适合。它实现起来真的很快,而且很容易调用。如下所示:

templatetags/my_filters.py中的

代码语言:javascript
复制
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]))

模板中的

代码语言:javascript
复制
{% load my_filters %}

...

{% if myvar|isinst:"mymodule.MyClass" %}
...do your stuff
{% endif %}

虽然上面是一个示例代码(未经过测试),但我相信它应该可以工作。有关自定义模板筛选器的详细信息,请参阅the django documentation

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

票数 11
EN

Stack Overflow用户

发布于 2011-08-22 22:17:06

这里您遗漏了一些东西:模板中唯一的逻辑应该是处理模板呈现。isinstance / issubclass显然闻起来像是视图逻辑,应该在视图中。如果模板渲染依赖于这些函数(我猜确实如此),那么您应该在视图中实现逻辑,并将模板需要知道的内容传递给它:

代码语言:javascript
复制
# in the view:
if isinstance(some_obj, SomeClass):
    do_fancy_template_stuff = True
else:
    do_fancy_template_stuff = False

# in the template:
{% if do_fancy_template_stuff %}
    <fancy_template_stuff />
{% endif %}

记住: django模板引擎的创建考虑到了非程序员,比如设计师。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7148792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档