2015-09-18 6 views
0

Я пишу небольшое приложение в колбе.Колба 404 страница не найдена

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 

Когда я нажимаю на "Click Me" HREF в index.html Это дает мне 404 не найден на шаблоне new.html. Я не понимаю, почему, потому что я следовал базовому учебнику. Я пытался менять порты, и это сработало. Но потом я попытался обновить код, и он снова сломал ссылку.

ответ

1

Так что причина этого в том, что колбы регистрируют/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') 

Это изменило ваш код, и у меня может не хватить информации о вашем прецеденте. Если это изменяет его, не подлежащее использованию для вашего приложения, дайте мне знать, и я соответствующим образом отрегулирую свой ответ.