如何将一个python的URL列表传递给Django模板并使它们可以点击?

时间:2018-04-05 22:05:09

标签: python django

我有一个网址的python列表,如下所示:

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

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

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

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

2 个答案:

答案 0 :(得分:9)

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

现在,您可以将其关闭,但之后您可能面临上述安全问题。

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

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

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

答案 1 :(得分:0)

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

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

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

{{ list.index }}

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