2017-08-01 5 views
0

特定のディレクトリ( "/ data/file/transfer")にすべてのファイルとサブディレクトリを表示しようとしています。
今私は、この問題は2番目のレベルのサブディレクトリにあるこのファイルを取得しています。私はJinjaテンプレートを使用してページを表示しています。ファイルget_this_file.txtは、第一/第二/ディレクトリ/に/データ/ファイル/転送され
Python、Flask、Jinja:ディレクトリとファイルの一覧表示:hrefが正しく設定されていません

/data/ 
----file/ 
--------transfer/ 
-------------first/ 
----------------second/ 
-------------------get_this_file.txt 


:よう

のディレクトリ構造が見えます。

#! /usr/bin/env python 

from flask import Flask,render_template, send_file 
import os 
import sys 

app = Flask(__name__) 

@app.route("/list_data", defaults={'req_path': ''}) 
@app.route('/<path:req_path>') 
def incident_data(req_path): 
    base_dir = "/data/file/transfer/" 
    abs_path = os.path.join(base_dir, req_path) 
    if os.path.isfile(abs_path): 
     return send_file(abs_path) 
    final_files = [] 
    if os.path.isdir(abs_path): 
     files = os.listdir(abs_path) 
     for file in files: 
      temp_file = req_path + "/" + file 
      print temp_file 
      final_files.append(temp_file) 

    return render_template('files.html', files=final_files) 

if __name__ == "__main__": 

    app.config.update(dict(
     DEBUG=True, 
     SECRET_KEY=b'_isecret/' 
    )) 

    app.run(host="0.0.0.0", port=8080) 


私のテンプレート/ files.html以下の通りです:

<ul> 
    {% for file in files %} 
    <li><a href="{{ file }}">{{ file }}</a></li> 
    {% endfor %} 
</ul> 


OUTPUT:クロムの

192.168.168.xxx:8080/第1 /第2

第一/第二/ get_this_file.txt <は---(クリックされた場合) 192.168.168.xxx:8080/ 最初/

カント/second/get_this_file.txt get_this_fileため理由HREFを理解します.txtが間違っています。
ご協力いただければ幸いです。これに長い間苦しんでいる。

答えて

1

hrefの先頭に「/」を追加して相対パスを追加する必要があります。したがって、ドメインのルートから開始するようなドメインを解決します。

<a href="/{{ file }}">{{ file }}</a> 

と更新され、その後

OUTPUT: 
on chrome: 
192.168.168.xxx:8080/first/second 

first/second/get_this_file.txt <--- (when clicked) 
192.168.168.xxx:8080/first/second/get_this_file.txt 

あなたのためのすべてのhrefの問題を解決することなurl_for使用してみてください。

<li><a href="{{ url_for('incident_data', req_path=file) }}">{{ file }}</a></li> 
+0

+1 hrefの問題を解消するために...ありがとうございます。Raja Simon、あなたが言及しているように、スラッシュを追加しました。これはhrefの問題を解決しました。しかし、//192.168.168.xxx:8080/list_dataに行くと "/ first"と表示され、/ firstをクリックするとDNSアドレスに行き、エラーが見つかりませんでした。ページのリンクが「最初/」になります。 –

+0

私は自分の質問を更新しました。私に教えてください... –

+0

パーフェクト!私のために働く。おかげで多くのラジャサイモン!!! :) –

関連する問題