2012-11-29 110 views
0

#include似乎沒有工作,我得到一個「500內部服務器錯誤」。我在沒有包含的情況下嘗試了相同的代碼,將所有代碼放在一個文件中,並且它可以工作。我使用的是網絡framwork瓶獵豹#包括不工作

header.tmpl

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>$title</title> 

     #for $css in $css_sheets 
     <link rel="stylesheet" href="../$css"> 
     #end for 
     #for $js in $js_scripts 
     <script src="../$js"></script> 
     #end for 
    </head> 
    <body> 

home.tmpl

#include "header.tmpl" 
<p id="x">HELLO</p> 
#include "footer.tmpl" 

footer.tmpl

</body> 
</html> 

engine.py

from flask import Flask, redirect, request 
from Cheetah.Template import Template 

app = Flask(__name__) 

css_list = ['css/main.css'] 
js_list = ['js/main.js'] 
default_title = 'Default Title' 

namespace={ 
    'css_sheets' : css_list, 
    'js_scripts' : js_list, 
    'title' : default_title 
} 

@app.route('/') 
def main_route(): 
    return redirect('/index') 

@app.route('/index') 
def index(): 
    namespace['title']= 'THIS IS THE INDEX' 
    return render("cheetah/home.tmpl", namespace) 

def render(template, context): 
    """Helper function to make template rendering less painful.""" 
    return str(Template(file=template, namespaces=[context])) 

if __name__ == "__main__": 
    app.run() 

,我有一個次要的問題是關於$ CSS和JS $在header.tmpl變量:

<link rel="stylesheet" href="../$css">與$ CSS被設置爲 'CSS/main.css的' 作品

<link rel="stylesheet" href="$css">與$ CSS感設置爲'../css/main.css'失敗,它會將其讀爲純文本'$ css'而不是獲取變量的值。

這是爲什麼?

+0

*「似乎沒有工作」*。請詳細說明。發生了什麼,你期望發生了什麼,如果有任何錯誤消息,請將其全部包括在內。 –

+0

由此我的意思是,當我訪問該頁面時,我得到一個「500內部服務器錯誤」,並且我也嘗試在engine.py的「渲染」方法中打印出解析的模板,但沒有打印出來。 – Lex

+0

您可以編輯您的問題以添加該信息。您的日誌文件中的任何內容可以揭示500錯誤的原因? –

回答

0

問題是在#include中使用的路徑不是相對於調用它的模板(home.tmpl),我認爲是這種情況,而是在這種情況下是python文件(engine.py)不在同一個位置,所以程序沒有找到我想要包含的文件。

../web/engine.py 
../web/templates/home.tmpl 
../web/templates/header.tmpl 
../web/templates/footer.tmpl 
../web/css/main.css 
../web/js/main.js