2015-01-06 48 views
1

這是我在的web2py /應用/ MYAPP/routes.py文件(這是預加載的,剛添加的BASE參數):web2py的默認功能/控制器不工作

from fileutils import abspath 
from languages import read_possible_languages 

possible_languages = read_possible_languages(abspath('applications', app)) 
#NOTE! app - is an application based router's parameter with name of an 
#   application. E.g.'welcome' 

routers = dict(
    app= dict(
     default_language = possible_languages['default'][0], 
     languages = [lang for lang in possible_languages 
        if lang != 'default'], 
    ), 
    BASE= dict(
     default_application = 'myapp', 
     default_controller = 'default', 
     default_function = 'index', 
    functions = ['my', 'functions', 'are', 'here'], 
       ) 
) 

我當我訪問127.0.0.1:8000時路由到歡迎應用,並在訪問127.0.0.1:8000/function和127.0.0.1:8000/myapp/function時收到索引錯誤。我重新加載了路線。這是我在我的web2py目錄中唯一的routes.py文件。

+0

你是否在任何地方定義'app'?如果不是,則應該用實際應用程序的名稱替換它。如果您顯示您正在收到的回溯信息,可能會有所幫助。 – Anthony

+0

我只在嘗試訪問沒有控制器的站點時出現這些錯誤:「無效控制器(主頁/索引)」或「無效請求」。我注意到在路由文件中注意到:「要啓用該文件,1.將 /router.example.py重命名爲routes.py ..」我的根文件夾中沒有路徑文件;只在我的應用程序文件夾。我還需要一個根嗎?我真的不明白爲什麼地圖不起作用。 – datasci

回答

0

首先,如果使用特定於應用程序的routes.py文件,則必須在root/web2py文件夾中保留routes.py文件,並且必須使用routes_app來指定應用程序的路由(請參閱「Application-文檔的this section末尾的「特定URL重寫」部分)。其次,在使用基於參數的重寫系統時(即定義routers字典時),您根本不必費心使用特定於應用程序的routes.py文件。相反,只需在/ web2py文件夾中使用單個routes.py文件,並在需要自定義路由的每個應用(「BASE」鍵適用於所有應用)的routers字典中指定單獨的密鑰。 (從技術上講,您可以擁有特定於應用程序的routes.py文件,但是將所有內容保留在主要routes.py文件中並沒有多大優勢)。

最後,在上面的routes.py文件中,您必須在某處定義app變量(它應該是應用程序的名稱)或將其替換爲應用程序的名稱。

+0

好的,當我刪除特定於應用程序的routes.py文件並將其放入根文件夾(仍然使用基於參數的系統)時,該應用程序可以正常工作。但是,它不知道如何路由到管理員。我如何訪問管理員?另外,可以更具體地說明我可以如何使用參數方法爲多個應用程序定義自定義映射?如果我有app1在127.0.0.1:8000,我如何訪問app2,同時也將其定義爲另一個端口上的默認應用程序?如果你願意的話,我可以問第二個問題,以便爲後者提供信用。 – datasci

+0

我在您的routes.py中看不到任何可能阻止訪問管理員的內容。但是,管理員只能通過HTTPS或本地請求訪問,所以也許這就是問題所在。很難說不知道更多。關於第二個問題,請查看[示例文件](https://github.com/web2py/web2py/blob/master/examples/routes.parametric.example.py)中記錄的「domains」參數。如果您還有其他問題,可能最容易在Google羣組上詢問。 – Anthony