我有一个 Django 模板,其中包含一个模板标签,该标签采用变量 (shop.id) 并根据商店是否在数据库模型中返回两个字符串之一,如下所示
{% is_shop_claimed shop.id %}
模板标签返回的两个可能的字符串是
return '<p>Taken</p>'
或
return '<a href="/claim_shop/{{shop.id}}/">Claim shop now</a>'
当代码运行时,如果返回第二个字符串,它会出现在模板中(在浏览器中查看页面源代码),如
<a href="/claim_shop/{{shop.id}}/">Claim shop now</a>
并在浏览器中显示为这样的链接
立即领取商店
问题是 href 中的shop.id 没有被Django 模板引擎计算为数字。
例如,商店 123 的链接应如下所示
<a href="/claim_shop/123/">Claim shop now</a>
我已经检查了 Django 文档,了解适用于模板标记或模板中的字符串的过滤器,以便该字符串不会被转义,但运气不佳。
我看过this但似乎应该有一种简单的方法可以在模板中评估 {{shop.id}}。
我还使模板标记返回一个 Bool 而不是两个字符串,将演示文稿保留在模板中,就像我希望的那样,但在模板标记周围使用 if 语句,如下所示
{% if is_shop_claimed shop.id %}
<p>Taken</p>
{% elif not is_shop_claimed shop.id %}
<a href="/claim_shop/{{shop.id}}/">Claim shop now</a>
{% endif %}
不起作用,因为我无法将模板标记放入 if 语句中。
关于如何将 {{shop.id}} 评估为数字有什么建议吗?任何帮助,将不胜感激。 我正在学习 Django 和 Python,并且在这个问题上花费了数小时。
最佳答案
您正在传递该值,因此只需将其替换即可。
return '<a href="/claim_shop/%s/">Claim shop now</a>' % (shop_id,) # or however you refer to it in the code
关于django - 评估字符串作为模板标签 - Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13621327/