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.creator
是 User
和 request.user.username
是一个字符串。请尝试比较 request.user
。
【讨论】:
当 Django 模板中的两个东西不相等时,通常是变量的类型。我曾多次尝试比较 1 和“1”。 如果article.creator.username
与request.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模板比较字符串的主要内容,如果未能解决你的问题,请参考以下文章