如何在Python f-string中插入HTML链接并避免SyntaxError报错
问题解决方法
报错原因
- 第一个问题:
{% url %}是Django模板专属语法,只能在.html模板文件中使用,不能直接写在Python代码的f-string里,Python解释器无法识别该语法。 - 第二个问题:f-string中单个
{、}会被识别为变量插入标记,如果要输出字面量的花括号,需要用{{、}}转义,你写的单个{没有匹配的闭合标记,直接触发了语法错误。
正确写法
你需要用Django提供的reverse函数在Python代码中生成URL,替换模板标签的作用:
- 首先在
utils.py文件头部导入reverse:
from django.urls import reverse
- 替换循环中的拼接代码即可:
for event in events_per_day: d += f'<li> <a href="{reverse("somewhere", args=(event.pk,))}"> {event.time} {event.teacher} {event.student} {event.status} </a> </li>'
补充说明
如果你确实需要输出包含{% url %}模板标签的字符串(比如要返回给模板做二次渲染),就需要转义花括号,写法如下:
f'<li> <a href="{{% url \'somewhere\' event.pk %}}"> {event.time} {event.teacher} {event.student} {event.status} </a> </li>'
但你的场景是直接生成最终HTML,用reverse生成完整URL是最优方案。
内容的提问来源于stack exchange,提问作者coderDcoder
相关产品推荐
相关产品推荐

