烧瓶和视图出现404错误

时间:2014-05-06 12:33:44

标签: python flask

我仍然是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页面,我真的不确定为什么。< / p>

这是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 :(得分: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结尾的网址。该模板肯定以.html结束,但您的烧瓶应用程序不提供此类端点,它会加载该模板并使用您的函数提供的数据填充它。

答案 1 :(得分:0)

除了@msvalkon所说的,你应该使用url_for()在模板中生成URL,因为它更干净,更安全,而且只是“方式”。这里有一些examples

因此,模板中的一个链接可能如下所示:

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