【问题标题】:How to pass a python list of URLs to a Django template and make them clickable?如何将 Python 的 URL 列表传递给 Django 模板并使其可点击?
【发布时间】:2018-04-05 22:05:08
【问题描述】:

我有一个 Python 的 url 列表,如下所示:

list = ['/abc/1', 
       '/abc/3',
       '/abc/5',
       ...
       ]

所有这些 url 都遵循我在 urls.py 中定义的 url 模式“abc/n/”。 现在我想将此列表传递给 django 模板,使该列表的每个元素都变为可单击并在单击它们时运行与它们的 url 模式相对应的函数。 我尝试将锚标记硬编码到此列表的每个元素。例如

for i in range (len(list)):    
    list[i] = "<a href = \'" + list[i] + "\'>click me</a>"

然后通过上下文通过HttpResponse() 函数将此列表发送到模板。但这会以原始文本格式而不是链接显示列表项

【问题讨论】:

  • 如果我可以问,您是如何生成该列表的?
  • 1) 不要使用list 作为变量。 2) 循环时不要修改列表。

标签: python django


【解决方案1】:

不要使用for循环将链接格式化为html,只需将列表直接传递到您的上下文中,然后在您的django模板中使用:

{% for item in list %}
    <a href="{{ item }}">Link text</a>
{% endfor %}

如果您的链接不会全部连续放置在页面上,您可以使用:

{{ list.index }}

index 是您要访问的项目的索引

【讨论】:

  • 在手动索引的情况下,最好为每个链接使用不同的变量/名称
  • @Azsgy 是的,但只是使用操作给我的东西。可能是链接数未知的情况
【解决方案2】:

这里发生的事情是 django 是安全的并且正在转义你的 html。这是为了防止 XSS 漏洞。这是一个漏洞,发生在例如用户可以将恶意 HTML 插入您的网站。

现在,您可以将其关闭,但您可能会遇到上述安全问题。

您想要做的是在模板中生成 html,而不是在您的代码中(这就是模板的用途):

{% for link in links %}
<a href="{{ link }}">click me</a>
{% endfor %}

现在您只需在模板上下文中传递links

【讨论】:

  • href 中{{ link }} 周围不需要逗号吗?
  • 本来打算自己做,但stackoverflow编辑标准认为2个字符不值得:')
  • TIL:反逗号表示引号,谢谢。
  • afaic,引号通常指的是 ',而不是 "
猜你喜欢
  • 2012-09-27
  • 2011-08-17
  • 2014-08-14
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
相关资源
最近更新 更多