【问题标题】:How do you add a link in an f string?如何在 f 字符串中添加链接?
【发布时间】:2021-12-03 12:16:16
【问题描述】:

我正在尝试在下面的 f 字符串中添加一个链接:

d += f'<li> {event.time} {event.teacher} {event.student} {event.status} </li>'

基本上,我希望它看起来像下面这样:

f'<li> <a href="{% url 'somewhere' event.pk %}"> {event.time} {event.teacher} {event.student} {event.status} </a> </li>'

但是,当我这样做时,我收到以下错误:

SyntaxError: f-string: expecting '}'

你们知道如何在 f 字符串中输入链接吗?有什么问题可以问我。

这是代码的上下文,正如你们中的一些人所问的那样,我有 f 字符串:

class Calendar(HTMLCalendar):
    def __init__(self, year=None, month=None):
        self.year = year
        self.month = month
        super(Calendar, self).__init__()

    # formats a day as a td
    # filter events by day
    def formatday(self, day, events):
        events_per_day = events.filter(date__day=day)
        d = ''
        if True:
            for event in events_per_day:
                d += f'<li> {event.time} {event.teacher} {event.student} {event.status} </li>'

        if day != 0:
            return f"<td><span class='date'>{day}</span><ul> {d} </ul></td>"
        return '<td></td>'

顺便说一句,这些都在我的 utils.py 文件夹中。

【问题讨论】:

  • 请提供更多关于 f-string 放置位置的信息......谢谢。它是直接在视图中还是在视图中的消息对象中
  • 感谢您的评论。我在问题中添加了 f 字符串的上下文。
  • 代码对我来说看起来不错。您的代码中是否存在其他一些(意外损坏的)f 字符串的问题?检查与错误消息关联的行号。
  • 顺便说一句,您可能希望返回mark_safe( f"&lt;td&gt;...&lt;/td&gt;"),这可能会解决您的下一个问题。只要它是安全的,就是这样。 format_html 在这种情况下通常更可取。
  • 我实际上尝试了&lt;a href='somewhere' event.pk&gt;,而不是上面写的括号,它没有错误。但是,当我尝试在网页中单击该链接时,该链接根本不起作用。

标签: python django django-models django-views django-templates


【解决方案1】:

一个 f-string 不会评估 Django 模板标签,它只是将其视为大括号,但其中的内容恰好是一个无意义的表达式。

您可以使用reverse(…) [Django-doc] 来执行 URL 模式解析:

from django.urls import reverse

f'<li> <a href="{ reverse("somewhere", args=(event.pk,)) }"> {event.time} {event.teacher} {event.student} {event.status} </a> </li>'

【讨论】:

  • 感谢您的评论。但是,我得到SyntaxError: f-string: unmatched '('。你知道为什么吗?
  • @codebuilder: 你敢在args=( 处打开括号吗?我已经用给定的表达式对其进行了测试,并且有效。表达式中的括号应该是平衡的。
  • @codebuilder:因此您需要关闭 两个 括号,一个用于单例元组,一个用于函数调用。
【解决方案2】:

您可以使用变量来实现相同的输出:-

url_endpoint = reverse("somewhere", args=(event.pk,))

f'<li> <a href="{url_endpoint}"> {event.time} {event.teacher} {event.student} {event.status} </a> </li>'

【讨论】:

    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多