如果 django 模板中的条件不起作用

Posted

技术标签:

【中文标题】如果 django 模板中的条件不起作用【英文标题】:If condition in django templates not working 【发布时间】:2020-10-05 07:44:15 【问题描述】:

我已经根据 django 模板中定义的值尝试了 if 条件

% if randomgen == 2 %
<p style="float:right;text-align: center;padding:5px 5px;"><b>% randomgen %1</p>
% else %
<p style="float:right;text-align: center;padding:5px 5px;"><b>% randomgen % 2</p>
% endif %

randomgen 被定义为在 1 和 2 之间随机选择,并且该值在

中正确显示

标记,但不管它的值如何,它总是处于 else 条件

register = template.Library()

@register.tag(name="randomgen")
def randomgen(parser, token):
    items = []
    bits =  token.split_contents()
    for item in bits:
        items.append(item)
    return RandomgenNode(items[1:])

    def render(self, context):
        arg1 = 0
        arg2 = 10
        if "float" in self.items:
            result = random.randint(1,20)
        elif not self.items:
            result = random.randint(1,20)
        else:
            result = random.randint(1,2)
        return result

【问题讨论】:

% randomgen % 在做什么?你能分享你的randomgen函数的实现(或生成它的视图)吗? 首先确保randomgen 中的值是一个整数。我认为它的类型不是整数,那是因为你 register = template.Library() @register.tag(name="randomgen") def randomgen(parser, token): items = [] bits = token.split_contents() for item in bits: items.append(item) return RandomgenNode(items[1:]) def render(self, context): arg1 = 0 arg2 = 10 if "float" in self.items: result = random.randint(1,20) elif not self.items: result = random.randint(1,20) else: result = random.randint(1,2) 返回结果 你好,比斌,如果你可以编辑你的原始问题添加randomgen的代码,你可以在其中使用代码格式化会更有帮助。作为评论阅读起来非常困难。 当然,已经做到了.. 但基本上问题更多与标签的 html 引用有关。虽然生成的值是正确的,但只有 if 条件不能正常工作 【参考方案1】:

在您的 HTML 中,将 randomgen 设置为另一个变量:

% randomgen as rgen %

然后为您的条件使用新设置的变量:

% if rgen == 2 %

老实说,我很惊讶您的代码无法正常工作,因为您的使用在直觉上是有意义的。虽然知道它不起作用,但我的猜测是模板将一个函数与一个总是返回 False 的整数进行比较。好问题!

【讨论】:

试过但一样。不走运.. 仍然总是进入 else 条件 你使用的是什么版本的 Django?另外,您使用“@register.tag”而不是“@register.simple_tag”是否有原因? Django==2.2.5 并且也尝试过 simple_tag 但效果不错 确实有效。再次检查,它的工作.. 非常感谢 Zenon 太棒了!您是否保持代码不变,只是将标签更改为 simple_tag?

以上是关于如果 django 模板中的条件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如果模板标签不起作用,则在 Django 中过滤

如果语句在模板文件中不起作用

django模板中的锚标记不起作用

使用模板标签循环遍历 django 中的对象不起作用

Django DetailView模板默认字段值不起作用

python-django模板继承在引用基中的多个块时不起作用