django - 评估字符串作为模板标签 - Django

标签 django django-templates

我有一个 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/

相关文章:

Django 模板变量值与字符串文字比较失败

python - Django send_mail 通过 gmail 很慢

django - 如何向无序列表的输出添加属性?

javascript - 从模板标签中包含 css 和/或脚本

css - 我的更新页面的 css 没有正确加载,但其他页面工作得很好

django 在模板中迭代 SelectMultiple/CheckboxSelectMultiple 时出现问题

python - 为什么 mysql 在与 python 一起使用时返回格式为 ('abc' ) 的字符串

python - 在同一项目中的应用程序之间传递 url

Django 不反射(reflect)对应用程序所做的更改

python - django 模板 : how to expand a variable into the string argument for the built-in tag `url`