找不到Flask 404页面

时间:2015-09-18 03:45:37

标签: python html flask

我在Flask写了一个小应用程序。

run.py

#!flask/bin/python
from app import app
app.run(debug=True, port=9001)

init .py

from flask import Flask
app = Flask(__name__)
from app import views

的index.html

{% extends "base.html" %}
{% block content %}
    <select id = "foo">
        {% for item in Citydata %}
            <option value = {{ item.link }}> {{ item.name }} </option>
        {% endfor %}
    </select>
    <a href="/new">Click here</a>

{% endblock %}

new.html

{% extends "base.html" %}
{% block content %}
    <p>gafgafgadfgaerwgtdfzgaergdfzgaergaergaergt</p>
{% endblock %}

,最后是views.py

from flask import render_template
from app import app
from bs4 import BeautifulSoup
import urllib2
import traceback


class City_Link(object):
    name = ""
    link = ""

    # The class "constructor" - It's actually an initializer
    def __init__(self, name, link):
        self.name = name
        self.link = link


@app.route('/')
@app.route('/index')
def index():
    URL = 'http://www.amis.pk/DistrictCities.aspx'
    City_Data = scrape(URL)
    return render_template("index.html",
                           title='Home',
                           Citydata=City_Data)

@app.route('/new/<data>', methods=['GET', 'POST'])
def new(data):
    return render_template("new.html",
                           title='Home',
                           link = data)


def scrape(url):
    data = []
    try:
        page = urllib2.urlopen(url)
        soup = BeautifulSoup(page.read(), "lxml")
        table = soup.body.find(id='TABLE1')
        for row in table.findAll("tr"):
            heads = row.findAll("a")
            for head in heads:
                data.append((City_Link(head.text.strip(), head.attrs['href'])))
    except:
        print(traceback.format_exc())
    return data

当我点击&#34;点击我&#34; index.html中的href它给我在模板new.html上找不到404。我不明白为什么因为我遵循了基础教程。我尝试更改端口,它工作。但后来我尝试更新代码,它再次破坏了链接。

1 个答案:

答案 0 :(得分:1)

因此发生这种情况的原因是因为flask寄存器/ new和/ new /是两条不同的路径。

看起来您实际上并没有将任何数据传递给数据变量。您可以通过将链接更改为指向

来暂时解决此问题
/new/something

但这并没有完全解决问题。我建议调整模板代码以使用极好的url_for函数。您可以在此处找到它的扩展文档:http://flask.pocoo.org/docs/0.10/api/#flask.url_for

当我们调整您的代码时,它应该如下所示:

<a href="{{ url_for('new') }}">Click here</a>

并且该数据变量看起来甚至没有使用过!让我们完全剥离它!

@app.route('/new', methods=['GET', 'POST'])
def new():
    return render_template("new.html",
                           title='Home')

这改变了您的代码,我可能没有足够的有关您的用例的信息。如果这修改了它而不是可用于您的应用程序,请告诉我,我会相应地调整我的答案。