User:ExpressとEJSを使用してNodejsでプログラムを書いてください。ディレクトリを再帰的にスキャンし、ファイルとフォルダーのネストされたリストをWebページとして提供したい Assistant:もちろん！Express.jsの例は、ExpressおよびEJSを使用してディレクトリを再帰的にスキャンし、ファイルとフォルダーのネストされたリストをWebページとして提供するものです。

`` `
const express = require（ 'express'）;
const app = express（）;
const ejs = require（ 'ejs'）;
const path = require（ 'path'）;
const fs = require（ 'fs'）;

//ビューディレクトリとビューエンジンを設定します
app.set（ 'views'、path.join（__ dirname、 'Views'））;
app.set（ 'View Engine'、 'ejs'）;

//ディレクトリリストのルートを定義します
app.get（ '/list/：dir（*）'、（req、res）=> {
  // URLパラメーターからディレクトリパスを取得します
  const dirpath = path.join（__ dirname、req.params.dir）;

  //ディレクトリが存在するかどうかを確認します
  if（fs.existsync（dirpath））{
    //ディレクトリの内容を読み取ります
    const files = fs.readdirsync（dirpath）;

    //ネストされたリストデータを保持する配列を作成する
    const listdata = [];

    //ディレクトリ内の各ファイル/フォルダーを反復
    files.foreach（file => {
      //ファイル/フォルダーへのフルパスを構築します
      const filepath = path.join（dirpath、file）;

      //アイテムがディレクトリであるかどうかを確認します
      if（fs.statsync（filepath）.isdirectory（））{
        //この関数を再帰的に呼び出して、サブディレクトリのネストされたリストを取得します
        const nestedList = getNestedList（filepath）;

        //現在のアイテムにネストされたリストデータを追加する
        listData.push（{name：file、type： 'directory'、item：nestedList}）;
      } それ以外 {
        //現在のアイテムにファイルデータを追加します
        listData.push（{name：file、type： 'file'}）;
      }
    }）;

    //ネストされたリストデータでEJSテンプレートをレンダリング
    Res.Render（ 'list'、{dirpath、listdata}）;
  } それ以外 {
    //ディレクトリが存在しない場合は、404エラーを返します
    Res.Status（404）.send（ 'ディレクトリは見つかりません'）;
  }
}）;

//関数を定義して、ディレクトリのネストされたリストを再帰的に取得します
関数getNestedList（dirpath）{
  //ディレクトリの内容を読み取ります
  const files = fs.readdirsync（dirpath）;

  //ネストされたリストデータを保持する配列を作成する
  const nestedlist = [];

  //ディレクトリ内の各ファイル/フォルダーを反復
  files.foreach（file => {
    //ファイル/フォルダーへのフルパスを構築します
    const filepath = path.join（dirpath、file）;

    //アイテムがディレクトリであるかどうかを確認します
    if（fs.statsync（filepath）.isdirectory（））{
      //この関数を再帰的に呼び出して、サブディレクトリのネストされたリストを取得します
      const sublist = getnestedlist（filepath）;

      //現在のアイテムにネストされたリストデータを追加する
      nestedList.push（{name：file、type： 'directory'、item：sublist}）;
    } それ以外 {
      //現在のアイテムにファイルデータを追加します
      nestedList.push（{name：file、type： 'file'}）;
    }
  }）;

  //ネストされたリストデータを返します
  NestedListを返します。
}

//ポート3000でサーバーを起動します
app.listen（3000、（）=> console.log（ 'サーバーがポート3000'で開始された））;
`` `

このプログラムは、ルート `/list/：dir（*）`を定義します。これは、ディレクトリパスをパラメーターとして取得し、そのディレクトリにファイルとフォルダーのネストされたリストを含むWebページを返します。`getnestedList（）`関数は、ディレクトリを再帰的にスキャンし、ネストされたリストデータを構築するために使用されます。EJSテンプレート「Views/list.ejs」は、ネストされたリストデータを使用してWebページをレンダリングするために使用されます。

注：このプログラムは、スキャンされるディレクトリがnode.jsアプリケーションを実行しているサーバー上のローカルディレクトリであると想定しています。リモートサーバーまたはクライアント側のWebアプリケーションからディレクトリをスキャンする場合は、それに応じてプログラムを変更する必要があります。 
User:Pythonの同様のアプリをDjangoで再作成します
`` python
django.shortcutsからインポートレンダリング
django.httpからhttpresponsenotfoundからインポート
OSをインポートします

＃ディレクトリリストのビューを定義します
def directory_listing（request、dir_path）：
    ＃ディレクトリへの完全なパスを取得します
    full_path = os.path.join（os.getcwd（）、dir_path）

    ＃ディレクトリが存在するかどうかを確認します
    os.path.isdir（full_path）の場合：
        ＃ディレクトリの内容をお読みください
        files = os.listdir（full_path）

        ＃ネストされたリストデータを保持する配列を作成する
        list_data = []

        ＃ディレクトリ内の各ファイル/フォルダーを反復
        ファイルのファイルの場合：
            ＃ファイル/フォルダーへのフルパスを構築する
            file_path = os.path.join（full_path、file）

            ＃アイテムがディレクトリであるかどうかを確認します
            os.path.isdir（file_path）の場合：
                ＃この関数を再帰的に呼び出して、サブディレクトリのネストされたリストを取得します
                sub_list = get_nested_list（file_path）

                ＃ネストされたリストデータを現在のアイテムに追加する
                list_data.append（{'name'：file、 'type'： 'directory'、 'items'：sub_list}）））
            それ以外：
                ＃現在のアイテムにファイルデータを追加します
                list_data.append（{'name'：file、 'type'： 'file'}）

        ＃ネストされたリストデータでHTMLテンプレートをレンダリング
        return render（request、 'list.html'、{'dir_path'：dir_path、 'list_data'：list_data}）
    それ以外：
        ＃ディレクトリが存在しない場合は、404エラーを返します
        return httpresponsenotfound（ '<h1>ディレクトリが見つかりません</h1>'）

＃ディレクトリのネストされたリストを再帰的に取得する機能を定義します
def get_nested_list（dir_path）：
    ＃ディレクトリの内容をお読みください
    files = os.listdir（dir_path）

    ＃ネストされたリストデータを保持する配列を作成する
    nested_list = []

    ＃ディレクトリ内の各ファイル/フォルダーを反復
    ファイルのファイルの場合：
        ＃ファイル/フォルダーへのフルパスを構築する
        file_path = os.path.join（dir_path、file）

        ＃アイテムがディレクトリであるかどうかを確認します
        os.path.isdir（file_path）の場合：
            ＃この関数を再帰的に呼び出して、サブディレクトリのネストされたリストを取得します
            sub_list = get_nested_list（file_path）

            ＃ネストされたリストデータを現在のアイテムに追加する
            nested_list.append（{'name'：file、 'type'： 'directory'、 'items'：sub_list}）
        それ以外：
            ＃現在のアイテムにファイルデータを追加します
            nested_list.append（{'name'：file、 'type'： 'file'}）

    ＃ネストされたリストデータを返します
    nested_listを返します
`` `