Django - 如何在 format_html 安全字符串中使用 URL 模板标签?

Django - How do I use the URL template tag in a format_html safe string?

我正在尝试将 URL 模板标签包含在我使用 format_html 方法创建的字符串中:

message = format_html(
            '''<div>
               <p>{0} wants to join {1}!</p>
               {% url 'accounts:detail' pk={2} as profile_url %}
               <p>
               View their
               <a href="{{ profile_url }}">profile</a>
               </p>
               <div>Approve</div>
               <div>Deny</div>
               </div>
           ''',
           self.request_user.username,
           self.lab.name,
           self.request_user.pk)

输出到浏览器的html是这样的:

<a href="{ url 'accounts:detail' pk=4}">profile</a>

基本上我的 url 标签没有 %。

我尝试通过键入以下内容来转义 %:

{%% url 'accounts:detail' pk={2} as profile_url %%}

但我收到相同的输出。

有什么想法吗?

您或许应该尝试使用 {{ profile_url|safe }} 或使用 {% autoescape %} Autoescappe

您可以直接创建 URL 与 reverse():

message = format_html(
        '''<div>
           <p>{0} wants to join {1}!</p>
           <p>
           View their
           <a href="{2}">profile</a>
           </p>
           <div>Approve</div>
           <div>Deny</div>
           </div>
       ''',
       self.request_user.username,
       self.lab.name,
       reverse('accounts:detail', kwargs={'pk':self.request_user.pk})
)