2011-08-02 3 views
0

私のプロジェクトにはwebpyフレームワークを使用しています。私は自分のwebpyプログラムからファイルを渡し、それをそのままHTMLページに表示したい(ファイルは任意のテキストファイル/プログラムファイルかもしれない)。私はwebpyプログラムから次の関数を使ってテキストファイルを渡しました。HTMLページのファイルをそのまま表示

class display_files: 
    def GET(self): 
     wp=web.input() 
     file_name=wp.name 
     repo_name=wp.repo 
     repo_path=os.path.join('repos',repo_name) 
     file_path=os.path.join(repo_path,file_name) 
     fp=open(file_path,'rU')    #reading file from file path 
     text=fp.read()      #no problem found till this line. 
     fp.close()    
     return render.file_display(text) #calling file_display.html 

私は「file_display.html」から(ここではそれが「テキスト」である)ファイルを表示しようとしたとき、それはnewline.Hereは私のhtmlファイルで認識せずに連続して表示されます。それはhtmlページにあるよう

$def with(content) 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/string;charset=utf-8" > 
    <title>File content</title> 
</head> 
<body> 
    <form name="file_content" id="file_content" methode="GET"> 
     <p> $content</p> 
    </form> 
</body> 
<html> 

はどのようにしてファイルを表示することができます。

答えて

0

HTMLは単一の空白として空白文字の量を扱います。あなたが表示されているファイルには、このテキストが含まれている場合:

line one 
    line two with indent 

レンダリングfile_display.htmlは、このHTMLが含まれています:

<p> line one 
    line two with indent</p> 

はそれでも、改行と二つのスペースが単一のスペースとして扱われ、になりますブラウザには、次のようになります。改行やスペースがあるべきよう

line one line two with indent 

The pre elementは、その内のテキストがフォーマット済みであるブラウザに指示します保持された。したがって、テンプレートは次のようになります:

<form name="file_content" id="file_content" methode="GET"> 
    <pre>$content</pre> 
</form> 

Josephの助言については、web.pyテンプレートシステムがエスケープ処理を行います。ファイルに<または>の文字が含まれている場合は、&lt;&gt;に置き換えられます。

+0

ありがとうございますHelgi。あなたの答えは絶対に正しいです。ジョセフにも返信してくれてありがとう。 – Unni

0

は、<または>を& ltにグローバルに置き換える必要があるようです。または& gt;それぞれ:

http://jsfiddle.net/BaULp/

+0

私はかなり 'file_display.html'がUmniが表示しようとしているファイルではなく、web.pyのテンプレートファイルだと確信しています。テンプレートをエスケープする必要はありません。 – Helgi

+0

@Helgi ah。私はweb.pyについて知りません。私はちょうど私がそれが問題だと思ったので、 'pre'タグの間にHTMLを表示する方法を見つけようとしていました。 :P情報をありがとう! –

+0

Helgiが正しいです。 file_display.htmlは私のweb.pyテンプレートです。 – Unni

関連する問題