Каталог templates
не связан с URL-адресом, файлы в этом каталоге не «опубликованы».Вы не должны помещать туда файлы, которые вы намереваетесь обслуживать без обработки (выполнения шаблонов).
При использовании конфигурации по умолчанию только файлы в каталоге static
доступны через префикс пути к /static/
, см. Статические файлы раздел быстрого запуска Flask.
Цель каталога templates
- файлы, которые можно загружать как шаблоны Jinja2 с использованием render_template()
функция , где вы используете эту функцию в функциях конечных точек, которые вы зарегистрировали в Flask для определенных URL-адресов.
Сначала вы можете попробовать учебник Flask , он более подробно охватывает оба шаблонов и статических файлов .
Для сайта блога обычным способом было бы сохранить данные поста блога в базе данных или текстовых файлах, которые Python может легко загрузить, а затем использовать шаблон single для визуализации содержимого.Вы зарегистрируете URL-адрес с шаблоном, который будет вызывать функцию, которая может загрузить любые данные страницы блога, а затем использовать шаблон страницы блога для вывода:
@app.route('/blog/<page_name>')
def blog_page(page_name):
page_data = load_blog_page(page_name)
if not page_data: # no page? Produce a not found error.
abort(404)
return render_template('blog_page.html', **page_data)
Приведенная выше функция будет вызываться, когдабраузер посещает URL, которые начинаются с /blog/
, и вызывается со следующей частью как переменная page_name
;например, /blog/chapter-1
приведет к установке page_name
на 'chapter-1'
.Обратите внимание, что в URL не может быть пробелов (пробелы должны быть закодированы в %20
, чтобы URL оставался URL).
Затем функция загружает данные страницы (с load_log_page()
функции, которую вы должны написать сами), затем при условии, что page_data
не является пустым, или None
, или какое-либо другое значение false-y, указывающее, что страница на самом деле не существует, использует функцию render_template()
для создания вывода HTML.render_template()
будет использовать здесь файл templates/blog_page.html
в качестве файла шаблона, а page_data
предполагается как словарь, пары ключ-значение которого составляют переменные, которые шаблон может использовать.