2015-07-12 77 views
0

我的web2py應用程序被設計爲使用從存儲在我的「私人」文件夾中的文件,一個JSON鍵訪問私人文件夾。但是,我遇到訪問此文件的問題,因爲request.folder返回None。麻煩的web2py

這是一份不爲我工作的代碼位:

import os 
from gluon.globals import Request 


def my_function():  

    request = Request() 

    json_file = open(os.path.join('request.folder', 'private', 'quote_generator.json')) 
+0

我想'request.folder'是一個相對的參考目錄該文件。在執行web2py時,您可能不在request.folder所在的目錄中。 – jcoppens

+0

是對在web2py的控制器的功能上述(設計成處理對HTTP請求的響應),或者這是一個腳本,是沒有設計爲HTTP請求的上下文之外運行的web2py應用程序的一部分? – Anthony

+0

該函數位於modules文件夾中的Python腳本中,然後由控制器調用。 如何鏈接到私人文件夾中的文件? – Abbie

回答

0

對於將處理HTTP請求的web2py應用程序中的代碼,你不應該創建自己的Request對象 - 在web2py的執行環境已經包括了Request對象,並用一些屬性填充它,包括request.folder(當你從頭創建一個新的Request對象,它不具有folder屬性)。

如果一個模塊中的功能需要訪問request對象,應該明確地將它作爲一個參數或使用的方法描述here

from gluon import current 

def my_function(): 
    json_file = open(os.path.join(current.request.folder, 
            'private', 'quote_generator.json')) 

可選地,傳遞request作爲參數:

def my_function(request): 
    json_file = open(os.path.join(request.folder, 
            'private', 'quote_generator.json')) 

在這種情況下,從web2py模型,控制器或視圖調用上述函數時,必須傳入request對象。

最後,請注意,當您撥打os.path.join時,不會將request.folder放在引號中,因爲這會導致將字符串文字「request.folder」添加到路徑中。

+0

謝謝,我使用了導入'current'的第一個選項並且工作正常。在我沒有想到的時候,我一定會把'request.folder'放在引號中的某個位置 - 不是在幫助! – Abbie