2016-10-06 2 views
0

Я пытаюсь использовать флягу для сканирования всех файлов в определенной папке и создать URL-адрес ссылки на эти файлы автоматически, поэтому сначала я определил приложение маршрут Настой:Переменные в шаблоне jinja2 ввозимые колбу дублируется

homepath = os.getcwd() # the root path of the app 
@app.route('/<folder>/')   
def showList(folder): 
    folder_abs_path = homepath + '/static/'+folder 
    files = os.listdir(folder_abs_path) 
    return render_template('blog_list.html', files=files, folderName=folder) 

И создать шаблон jinja2 как:

{% extends "base.html" %} 
{% block body %} 
<div id="main-contents"> 
    <ul> 
    {% for item in files %} 
    <li><a href="{{ folderName +'/'+ item }}"> {{ item }}</a></li> 
    {% endfor %} 
    </ul> 
</div> 
{% endblock %} 

Когда колба работает, я напечатал:

http://localhost:5000/test/ 

он работает, перечислите все файлы в тестовой папке (которая является «file1.md» и «file2.md»), но она не перестает ссылаться на соответствующие ссылки для файлов, когда я щелкнул файл file.m.md в локальном веб-странице, то он относится к URL, как:

http://localhost:5000/test/test/file1.md 

то, что я хочу «http://localhost:5000/test/file1.md», так почему два названия папки «тест»?

+0

Вы генерируете относительный путь, вы должны сделать его абсолютным. см. сгенерированный источник. –

+0

Поскольку URL-адрес будет отправлен на сервер в качестве сообщения GET, поэтому он не может быть абсолютным путем или у вас есть какие-либо решения по этому поводу, в настоящее время я вручную добавляю имя папки в шаблон. – cjhang

ответ

0

Как @Klaus сказал в комментарии, вы генерируете относительные пути для статических файлов. Чтобы избежать этого, просто использовать функцию url_for() в шаблоне для генерации пути:

{% extends "layouts/main.html" %} 
{% block content %} 
<div id="main-contents"> 
    <ul> 
    {% for item in files %} 
    <li><a href="{{ url_for('static', filename=folderName + '/' + item)}}"> {{ item }}</a></li> 
    {% endfor %} 
    </ul> 
</div> 
{% endblock %} 
+0

Для вашего решения URL-адрес, который он сгенерировал, будет «http: // localhost: 5000/static/test/file1.md», и он будет перенаправлен в файл orignal, а не на запрос GET, который я хочу отправить на сервер. В настоящее время я избегаю проблемы, используя другой шаблон для другой папки. – cjhang

+0

Тогда какова ваша цель? Отправка запроса на 'test/file1.md' сейчас ничего не делает. – Dauros

Смежные вопросы