我试图创建一个博客页面,我的要求是在html页面中列出组od链接。
app.py
:
@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.
我确定这将无法正常工作,因为它指向不同的URL,能否有人指导我如何在Flask应用中实现“章节”列表?
答案 0 :(得分:1)
如果已经有静态html文件,则应按document here中所述将其用作静态文件。然后,将这些文件的网址放在您的主页中:
url_for('static', filename='chapter1.html')
答案 1 :(得分:0)
templates
目录未链接到URL,该目录中的文件未“发布”。您不应该在没有处理(执行模板)的情况下将要放置的文件放在那里。
通过默认配置,只能通过static
URL路径前缀访问/static/
目录中的文件,请参见Flask快速入门的Static Files section。
templates
目录的目的是使文件可以使用render_template()
function作为Jinja2模板加载,您可以在其中使用该功能在Flask注册的特定URL的端点函数中使用该功能。
您可能想先尝试Flask tutorial,它更详细地介绍了templates和static files。
对于博客网站,正常的模式是让您以Python可以轻松加载的某种方式将博客文章数据存储在数据库或文本文件中,然后使用单个模板呈现内容。您将使用一种模式注册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)
当浏览器访问以/blog/
开头的URL时,上述函数将被调用,并以下一部分作为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
被假定为字典,其键值对构成模板可以使用的变量。