2

私はpythonが初めてで、現在makoテンプレートを使用しようとしています。HTML ファイルを取得して、別の HTML ファイルからテンプレートを追加できるようにしたいと考えています。index.htmlこのファイルを取得したとしましょう:

<html>
<head>
  <title>Hello</title>
</head>
<body>    
    <p>Hello, ${name}!</p>
</body>
</html>

そしてこのname.htmlファイル:

world

(はい、単語の世界が中にあるだけです)。${name}inをファイルindex.htmlの内容に置き換えたい。次のコードを使用して、render メソッドで名前を指定することによりname.html、ファイルなしでこれを行うことができました。name.html

@route(':filename')
def static_file(filename):    
    mylookup = TemplateLookup(directories=['html'])
    mytemplate = mylookup.get_template('hello/index.html')
    return mytemplate.render(name='world')

これは明らかに大きなテキストには役に立ちません。からテキストをロードするだけですがname.html、これを行う方法はまだ見つかりません。何を試すべきですか?

4

3 に答える 3

2
return mytemplate.render(name=open(<path-to-file>).read())
于 2010-08-19T12:30:14.273 に答える
2

返信ありがとうございます。
アイデアは、キャッシュなどのことを行い、ファイルが更新されたかどうかを確認するため、mako フレームワークを使用することです...

このコードは最終的にはうまくいくようです:

@route(':filename')
def static_file(filename):    
    mylookup = TemplateLookup(directories=['.'])
    mytemplate = mylookup.get_template('index.html')
    temp = mylookup.get_template('name.html').render()
    return mytemplate.render(name=temp)

再度、感謝します。

于 2010-08-19T13:46:02.160 に答える
1

あなたが望むのはファイルからコンテンツを読み取ることだけであることを正しく理解しましたか? 完全なコンテンツを読みたい場合は、次のようなものを使用します (Python >= 2.5):

from __future__ import with_statement

with open(my_file_name, 'r') as fp:
    content = fp.read()

注: from __future__ 行は、.py ファイルの最初の行 (または最初の行に配置できるコンテンツ エンコーディング仕様の直後) である必要があります。

または古いアプローチ:

fp = open(my_file_name, 'r')
try:
    content = fp.read()
finally:
    fp.close()

ファイルにASCII以外の文字が含まれている場合は、コーデックのページも見てください:-)

次に、あなたの例に基づいて、最後のセクションは次のようになります。

from __future__ import with_statement

@route(':filename')
def static_file(filename):    
    mylookup = TemplateLookup(directories=['html'])
    mytemplate = mylookup.get_template('hello/index.html')
    content = ''
    with open('name.html', 'r') as fp:
        content = fp.read()
    return mytemplate.render(name=content)

ファイル オブジェクトの詳細については、公式ドキュメントを参照してください :-)

ショートカット バージョンもあります。

content = open('name.html').read()

しかし、私は個人的には明示的な結び付きの長いバージョンを好みます:-)

于 2010-08-19T12:29:08.077 に答える