Есть ли способ реализовать список различных ссылок в приложении Flask? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь создать страницу блога, где мое требование состоит в том, чтобы перечислить групповые ссылки на html-странице.

app.py * * 1004

@app.route("/blog")
def blog():
    return render_template('blog.html')

blog.html:

{% extends "index.html" %}

{% block content %}

<ul>
    <li>
        <a href="/templates/chapter 1.html">Chapter 1</a>
    </li>
    <li>
        <a href="/templates/chapter 2.html">Chapter 2</a>
    </li>
<ul>
{% endblock content %}

Хранит все мои html-страницы в каталоге templates.

Я могу открыть localhost:8000/blog, где я могу просмотреть все ссылки Chapter1, chapter2, но когда я нажимаю на ссылку, я получаю сообщение об ошибке:

http://localhost:5000/templates/chapter%201.html

Not Found

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

error traceback

Я уверен, что это не сработает, так как он указывает на другой URL, может кто-нибудь подсказать, как мне реализовать список глав в приложении Flask?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Если у вас уже есть статические html-файлы, вы должны использовать его как статический файл, как указано в документе здесь . Затем поместите URL-адреса для этих файлов на главной странице:

url_for('static', filename='chapter1.html')
0 голосов
/ 24 апреля 2019

Каталог 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 предполагается как словарь, пары ключ-значение которого составляют переменные, которые шаблон может использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...