Django模板标记超链接

时间:2016-01-25 23:15:40

标签: python html django django-templates

在我的.html文件中,我有这段代码:

<ul>
    {% for file in files %}
        <li><a href="{% static 'notebooks/<**Part that I want to reference dynamically**>' %}">{{ file }}</a></li>
    {% endfor %}
</ul>

在我的views.py文件中:

def ipythonlist(request):
    files = [] 

    main_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'static/'))
    ipython_file_path = os.path.join(main_dir, 'notebooks/')

    for file in os.listdir(ipython_file_path):
        if file.endswith(".html"):
            files.append(file)

    return render(request, 'pages/ipythonlist.html', {'files': files})

我的网址文件:

url(r'^ipython/list', views.ipythonlist, name='ipythonlist')

所以我要做的是获取静态文件夹中目录中所有.html文件(或任何类型的文件,pdf,csv等)的列表。然后我使用模板标签将视图中的数据传递给我的html。我想动态链接到相应的文件,但我不知道该怎么做。

我尝试了{%static&#39; notebooks / {{file}}&#39; %},但刚刚返回错误。

不确定如何做到这一点,并希望得到一些帮助!

因此,文件链接的一个例子是{%static&#39; notebooks / chapter9.pdf&#39; %}。第9章,可以是任何名称。

2 个答案:

答案 0 :(得分:4)

{% for file in files %}
    {% with file_with_path='notebooks/'|add:file %}
        <li><a href="{% static file_with_path %}">{{ file }}</a></li>
    {% endwith %}        
{% endfor %}

答案 1 :(得分:1)

您可以在代码中使用变量,但无法将其插入到您尝试执行的字符串中。您可以使用notebooks/将路径添加到files,并在{% static %}中使用该路径:

# View
def ipythonlist(request):
    files = [] 

    main_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'static/'))
    ipython_file_path = os.path.join(main_dir, 'notebooks/')

    for file in os.listdir(ipython_file_path):
        if file.endswith(".html"):
            files.append('notebooks/%s' % file)

    return render(request, 'pages/ipythonlist.html', {'files': files})

# Template
<ul>
    {% for file in files %}
        <li><a href="{% static file %}">{{ file }}</a></li>
    {% endfor %}
</ul>