2013-05-27 61 views
2

我開始用燒瓶,我經歷了許多教程和一切工作。但是我開始了自己的應用程序,並且只找到404錯誤。我的Apache虛擬服務器的燒瓶 - 簡單的應用程序,但錯誤404沒有找到

配置爲:

<VirtualHost domain:80> 
    ServerAdmin [email protected] 
    ServerName domain 
    ServerAlias domain *.domain 

    WSGIDaemonProcess test user=www-data group=www-data threads=5 home=/var/www-py/domain 
    WSGIScriptAlias//var/www-py/domain/domain.wsgi 

<Directory /var/www-py/domain> 
    WSGIProcessGroup test 
    WSGIApplicationGroup %{GLOBAL} 
    WSGIScriptReloading On 
    Order deny,allow 
    Allow from all 
</Directory> 
</VirtualHost> 

domain.wsgi:

import sys, os 

current_dir = os.path.abspath(os.path.dirname(__file__)) 
sys.path.append(current_dir) 
from domain import app as application 

域/ __ init__.py

import os, sys 
from flask import Flask 
from datetime import * 
from flask.ext.sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.debug=True 
app.secret_key = 'mysecretkey' 

db = SQLAlchemy(app) 

域/視圖/ index.py

# -*- coding: utf-8 -*- 
from flask import Flask, request, session, g, redirect, url_for, \ 
abort, render_template, flash 

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

這就是所有和簡單的應用程序。問題是我嘗試的所有應用程序都是在一個文件中編寫的。現在我正試圖將它分類爲文件,以便管理更大的項目。 請你能幫助我。 謝謝。

回答

1

你有兩個問題:

  1. views/index.py你實際上並沒有定義app,這樣將導致NameError如果你實際導入views.index
  2. __init__.py你永遠不會導入views.index所以你的路線永遠不會被添加到Flask.url_routes地圖。

你有兩個選擇:

  1. 你可以走循環進口的出路,如文檔規定:

    # views.index 
    from flask import render_template 
    from domain import app 
    
    @app.route("/") 
    def index(): 
        return render_template("index.html") 
    
    # __init__.py 
    
    # ... snip ... 
    db = SQLAlchemy(app) 
    
    # View imports need to be at the bottom 
    # to ensure that we don't run into problems 
    # with partially constructed dependencies 
    # as this is a circular import 
    # (__init__ imports views.index which imports __init__ which imports views.index ...) 
    from views import index 
    
  2. 你可以拉的app創建成單獨文件並完全避免循環導入:

    # NEW: infrastructure.py 
    from flask import Flask 
    from flask.ext.sqlalchemy import SQLAlchemy 
    
    app = Flask("domain") 
    db = SQLAlchemy(app) 
    
    # views.index 
    from domain.infrastructure import app 
    
    # NEW: app.py 
    from domain.infrastructure import app 
    import domain.views.index 
    
    # __init__.py 
    # is now empty 
    
+0

感謝您的回覆。我試過你的第二個解決方案,它對於大型應用程序似乎更加清晰。但它不起作用。現在我收到錯誤「TypeError:'模塊'對象不可調用」。你知道這意味着什麼嗎? – user1743947

+0

@ user1743947 - 通常意味着您正在查看的符號是模塊,而不是可調用的對象。你可以在你的問題中發佈整個堆棧跟蹤嗎? –

+0

謝謝,我解決了這個問題。我有代碼錯字 – user1743947

0

您需要導入域中的views.index/init .py,並在index.py中添加「來自域導入應用程序」。否則它找不到應用程序