我有一个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>
并在浏览器中显示为此类链接
立即索赔商店
问题是 Django模板引擎将href 中的shop.id评估为。
对于商店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,我花了好几个小时来处理这个问题。
答案 0 :(得分:2)
您正在传递该值,因此请将其替换为。
return '<a href="/claim_shop/%s/">Claim shop now</a>' % (shop_id,) # or however you refer to it in the code
答案 1 :(得分:0)
我建议您在店铺模型中添加is_claimed
属性:
class Shop(models.model):
# you fields are here
@property
def is_claimed(self):
# logik for determining if the shop is claimed
if claimed:
return True
else:
return False
然后你可以在你的模板中使用:
{% if shop.is_claimed %}
<p>Taken</p>
{% else %}
<a href="/claim_shop/{{shop.id}}/">Claim shop now</a>
{% endif %}
您甚至可以将其移动到一个代码段,您可以根据需要添加或(更进一步)为其创建inclusion tag。