Flask和视图出现404错误

0 投票
2 回答
1207 浏览
提问于 2025-04-18 05:32

我刚开始学习Flask,正在尝试搭建一个非常简单的网站。以下是我的代码。

(app.py)

from __future__ import with_statement
import os
from flask import (Flask, session, redirect, url_for, abort,
               render_template, flash, request)
from werkzeug import secure_filename


app = Flask(__name__)
app.debug = True

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


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

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



if __name__ == '__main__':
    app.run()

在我的layout.html文件中,有一些链接指向上面的html文件,但当我运行app.py并点击链接时,却跳转到了404页面,我真的不明白为什么会这样。

这是layout.html的内容

<ol class="naviA">
    <li class="navi">
        <a class="navi" href="/image.html"><p>Image</p></a></li>
        <li class="navi"><a class="navi" href="/music.html"><p>Music</p></a></li>
        <li class="navi"><a class="navi" href="/video.html"><p>Video</p></a></li>
        <li class="navi"><a class="navi" href="/link.html"><p>Links</p></a></li>
        <li class="navi"><a class="navi" href="/storage.html"><p>Storage</p></a></li>
    </li>
</ol>

如果能得到一些帮助,那就太好了。

2 个回答

0

除了@msvalkon提到的内容,你应该在模板中使用 url_for() 来生成网址,这样做更简洁、更安全,而且这是推荐的做法。这里有一些示例可以参考。

因此,你的模板中的一个链接可能看起来像这样:

<li class="navi"><a class="navi" href="{{ url_for('image') }}"><p>Image</p></a></li>
1

你链接的地址写错了。把链接中的 .html 去掉就可以了。

<ol class="naviA">
    <li class="navi">
        <li class="navi"><a class="navi" href="/image"><p>Image</p></a></li>
        <li class="navi"><a class="navi" href="/music"><p>Music</p></a></li>
        <li class="navi"><a class="navi" href="/video"><p>Video</p></a></li>
        <li class="navi"><a class="navi" href="/link"><p>Links</p></a></li>
        <li class="navi"><a class="navi" href="/storage"><p>Storage</p></a></li>
    </li>
</ol>

如果你看看你的 @app.route 装饰器,它是这样定义的:

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

这就意味着你现在有一个以 /image 结尾的URL。虽然模板的名字后面是 .html,但你的flask应用并没有提供这样的地址,它是加载这个模板,并用你函数提供的数据来填充它。

撰写回答