2016-03-24 9 views
3

Ich bin eine Anwendung mit Flask implementieren und ich versuche, den Inhalt der Textdateien anzuzeigen, die ich in Protokollverzeichnis. Also ich habe dies getan:Anzeige Inhalt von Dateien in einem bestimmten Verzeichnis mit Flask

@app.route('/files', methods = ['GET']) 
def config(): 
    if 'username' in session : 
     path = os.path.expanduser(u'~/path/to/log/') 
     return render_template('files.html', tree=make_tree(path)) 
    else: 
     return redirect(url_for('login')) 

def make_tree(path): 
    tree = dict(name=os.path.basename(path), children=[]) 
    try: lst = os.listdir(path) 
    except OSError: 
     pass #ignore errors 
    else: 
     for name in lst: 
      fn = os.path.join(path, name) 
      if os.path.isdir(fn): 
       tree['children'].append(make_tree(fn)) 
      else: 
       tree['children'].append(dict(name=name)) 
    return tree 

in meiner HTML-Seite files.html:

<title>Path: {{ tree.name }}</title> 
<h1>{{ tree.name }}</h1> 

<div class="accordion-heading" > 
    <div class="accordion-toggle" > 
     <a data-toggle="collapse" data-target="#files_list" href="#files_list"> 
      <b> 

<ul> 
{%- for item in tree.children recursive %} 
<div class="well well-sm"> <li>{{ item.name }} </div> 
    {%- if item.children -%} 
     <ul>{{ loop(item.children) }}</ul> 
    {%- endif %}</li> 
{%- endfor %} 
</ul> 

</b></div> 
     </a> 
    </div> 

Diese zeigt nur die Namen der Dateien in meinem Log-Verzeichnis, aber ich bin nicht in der Lage, den Inhalt anzuzeigen die Dateien. Ich dachte, vielleicht kann ich so etwas wie:

import fnmatch 
def display_files(): 
    for dirpath, dirs, files in os.walk('log'): 
     for filename in fnmatch.filter(files, '*.*'): 
     with open(os.path.join(dirpath, filename)) as f: 
      file_contents = f.read().strip() 
      print file_contents 

    return render_template('files.html',title="index",file_contents=file_contents) 

Jede Hilfe bitte ??

+0

Willkommen bei Stack Overflow! Was meinst du mit dem Inhalt der Dateien? Wie Bild, wenn es ein '.jpg' ist und Quellcode, wenn es' .py' ist? –

+0

ja Entschuldigung, ich meinte Textdateien. Ich werde meine Frage bearbeiten. Vielen Dank! – hey

+0

Sie müssen den file_contents in einem Array oder einem Wörterbuch speichern. Sie durchlaufen alle Dateiinhalte und ordnen die Variable file_contents einfach neu zu. Alles, was an Ihre Vorlage übergeben wird, ist der letzte file_contents. Also entweder an ein Array anhängen oder zu einem Wörterbuch hinzufügen. Dann können Sie das in Ihrer Vorlage wiederholen. – wgwz

Antwort

0

Sie können sich wahrscheinlich Inhalt der Datei lesen und zu Vorlage wie in make_tree Funktion übergeben:

def make_tree(path): 
    tree = dict(name=os.path.basename(path), children=[]) 
    try: lst = os.listdir(path) 
    except OSError: 
     pass #ignore errors 
    else: 
     for name in lst: 
      fn = os.path.join(path, name) 
      if os.path.isdir(fn): 
       tree['children'].append(make_tree(fn)) 
      else: 
       with open(fn) as f: 
        contents = f.read() 
       tree['children'].append(dict(name=name, contents=contents)) 
    return tree 

und fügen Sie einfach <pre>{{ item.contents }}</pre> an den Ort, an dem Sie den Inhalt der Datei angezeigt werden soll. Zum Beispiel hier:

{%- for item in tree.children recursive %} 
    <div class="well well-sm"> 
     <li> 
      {{ item.name }} 
      <pre>{{ item.contents }}</pre> 
      {%- if item.children -%} 
       <ul>{{ loop(item.children) }}</ul> 
      {%- endif %} 
     </li> 
    </div> 
{%- endfor %} 

Das ist irgendwie hässlich, aber es sollte die richtigen Daten zeigen.

+0

Ilya Danke! das funktioniert! Danke für Ihre Hilfe! sehr geschätzt :) – hey

+0

Froh ich könnte helfen :) –

Verwandte Themen