Django模板比较字符串

Posted

技术标签:

【中文标题】Django模板比较字符串【英文标题】:Django template comparing string 【发布时间】:2012-06-06 10:14:32 【问题描述】:

我是 django 的新手。我遇到了在模板中比较字符串的问题。

我使用 ifnotequal 标签来比较字符串。但它不起作用。

我已经尝试输出变量:

 request.user.username  
 article.creator 

我在这里比较:

% ifnotequal request.user.username article.creator %
    # output something #
% endifnotequal %

但是当我执行硬编码时:它可以工作。

% ifnotequal "justin" "mckoy" %
    # output something #
% endifnotequal %

有什么问题? article.creator 来自数据库,user.username 来自请求。

谁能帮我解决这个问题?

【问题讨论】:

这可能是由于 request.user.name 实际上为空或 null 造成的吗?你检查过它是否真的包含一些东西吗? article.creator 也是字符串吗?可以发一下模型吗? 另外,在您的示例中,它是 request.user.usname 而不是 request.user.username。错字? @Yuri - 我的例子中的拼写错误.. 【参考方案1】:

article.creatorUserrequest.user.username 是一个字符串。请尝试比较 request.user

【讨论】:

当 Django 模板中的两个东西不相等时,通常是变量的类型。我曾多次尝试比较 1 和“1”。 如果article.creator.usernamerequest.user.username 比较,它也可以工作 只是因为该字段恰好是唯一的。您应该直接比较模型以确保它们确实是相同的记录。【参考方案2】:

试试这个:

% ifnotequal article.creator|stringformat:"s" request.user.username %

【讨论】:

它像字符串一样打印,但它不是字符串——对 UUID 也有效。 谢谢,我试图过滤一个被很多空格包围的变量,这就是解决方案 这在处理重组模板标签时也很有用,例如你必须使用类似 % if term.grouper|stringformat:"s" == current_term.description % 太棒了,这对我来说很不错 现在已弃用【参考方案3】:

对于模板中的字符串比较使用

% if name == "someone" %
   ............
   ............
% endif %

不等于

% if name != "someone" %
   ............
   ............
% endif %

【讨论】:

使用 this 而不是 ifequal/ifnotequal,因为这些方法将在不久的将来某个时候被删除。参考docs.djangoproject.com/en/2.0/ref/templates/builtins/… 这个比较语句出现错误 也不适合我。我在做% if utype == "p" %。它只是忽略了那条线。有人有解决办法吗? 注意如果==前后不加空格,Django无法解析表达式。【参考方案4】:
% ifequal material.unit 'U' %
    <p>are equals!<p/>
% endifequal %

【讨论】:

以上是关于Django模板比较字符串的主要内容,如果未能解决你的问题,请参考以下文章

Django的模板层简介

Django 模板语言

如何比较 Django 模板中的日期

如何比较 Django 模板中的 IntegerChoice 值

比较 Django 模板中的 url

如何比较 Django 模板中的两个查询集?