2016-08-19 5 views
3

Мне нужно отобразить содержимое каталога на страницах GH.Как включить индексирование каталогов на страницах GitHub

Предпочел бы

  1. Автоматически, без index.html
  2. инструмента или библиотек для автоматической генерации index.html
  3. Любого другого метода

Так что, если у меня есть FS в моем хранилище GH Pages:

http://github.com/[username]/[username].github.io/:

script/ 
- app/ 
    - core/ 
    - init.js 
- lib/ 
    - Element.animate.js 
    - Object.overlay.js 
- mod/ 
    - anim/ 
    - global/ 
     - carousel/ 
     - carousel.js 
     - global.js 
- ext/ 
    - cfgs.js 
index.html 

Я бы хотел, чтобы каждый индекс каталогов индексировался как обычно.

http://[username].github.io/script/:

- app/ 
- lib/ 
- mod/ 
- ext/ 

http://[username].github.io/script/mod/anim/global/:

- carousel/ 
- global.js 

Единственное, что я могу думать предпочтение # 2, написать или найти скрипт для автоматической генерации index.html из GitHub репо страницы или локального репо на моем FS.

ответ

5

Я также хотел это сделать. Я попытался загрузить файл .htaccess с содержимым Options +Indexes в соответствующий каталог, но это не сработало.

Итак, я использовал ваш вариант №2, написав крошечный скрипт Python для создания файла индекса для каталога.

""" Build index from directory listing 

make_index.py </path/to/directory> [--header <header text>] 
""" 

INDEX_TEMPLATE = r""" 
<html> 
<body> 
<h2>${header}</h2> 
<p> 
% for name in names: 
    <li><a href="${name}">${name}</a></li> 
% endfor 
</p> 
</body> 
</html> 
""" 

EXCLUDED = ['index.html'] 

import os 
import argparse 

# May need to do "pip install mako" 
from mako.template import Template 


def main(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument("directory") 
    parser.add_argument("--header") 
    args = parser.parse_args() 
    fnames = [fname for fname in sorted(os.listdir(args.directory)) 
       if fname not in EXCLUDED] 
    header = (args.header if args.header else os.path.basename(args.directory)) 
    print(Template(INDEX_TEMPLATE).render(names=fnames, header=header)) 


if __name__ == '__main__': 
    main() 
3

Лучше это путь, который будет идти в подкаталог и сделать индексные файлы для них, а также

""" Build index from directory listing 

make_index.py </path/to/directory> [--header <header text>] 
""" 
from __future__ import print_function 
import os.path, time 

INDEX_TEMPLATE = r""" 

<html> 
<head> 
<title>${header}</title> 
<meta name="description" content="${header}"/> 

</head> 
<body> 
    <h2>Index of ${header}</h2> 
    <p> 
    <table> 
     <tbody> 
      <tr> 
       <th valign="top"><img src="${ROOTDIR}images/blank.gif" 
        alt="[ICO]"></th> 
       <th><a href="?C=N;O=D">Name</a></th> 
       <th><a href="?C=M;O=A">Last modified</a></th> 
       <th><a href="?C=S;O=A">Size</a></th> 
       <th><a href="?C=D;O=A">Description</a></th> 
      </tr> 
      <tr> 
       <th colspan="5"><hr></th> 
      </tr> 
      <tr> 
       <td valign="top"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU0toU0EUPfPysx/tTxuDH9SCWhUDooIbd7oRUUTMouqi2iIoCO6lceHWhegy4EJFinWjrlQUpVm0IIoFpVDEIthm0dpikpf3ZuZ6Z94nrXhhMjM3c8895977BBHB2PznK8WPtDgyWH5q77cPH8PpdXuhpQT4ifR9u5sfJb1bmw6VivahATDrxcRZ2njfoaMv+2j7mLDn93MPiNRMvGbL18L9IpF8h9/TN+EYkMffSiOXJ5+hkD+PdqcLpICWHOHc2CC+LEyA/K+cKQMnlQHJX8wqYG3MAJy88Wa4OLDvEqAEOpJd0LxHIMdHBziowSwVlF8D6QaicK01krw/JynwcKoEwZczewroTvZirlKJs5CqQ5CG8pb57FnJUA0LYCXMX5fibd+p8LWDDemcPZbzQyjvH+Ki1TlIciElA7ghwLKV4kRZstt2sANWRjYTAGzuP2hXZFpJ/GsxgGJ0ox1aoFWsDXyyxqCs26+ydmagFN/rRjymJ1898bzGzmQE0HCZpmk5A0RFIv8Pn0WYPsiu6t/Rsj6PauVTwffTSzGAGZhUG2F06hEc9ibS7OPMNp6ErYFlKavo7MkhmTqCxZ/jwzGA9Hx82H2BZSw1NTN9Gx8ycHkajU/7M+jInsDC7DiaEmo1bNl1AMr9ASFgqVu9MCTIzoGUimXVAnnaN0PdBBDCCYbEtMk6wkpQwIG0sn0PQIUF4GsTwLSIFKNqF6DVrQq+IWVrQDxAYQC/1SsYOI4pOxKZrfifiUSbDUisif7XlpGIPufXd/uvdvZm760M0no1FZcnrzUdjw7au3vu/BVgAFLXeuTxhTXVAAAAAElFTkSuQmCC " 
        alt="[PARENTDIR]"></td> 
       <td><a href="../">Parent Directory</a></td> 
       <td>&nbsp;</td> 
       <td align="right">-</td> 
       <td>&nbsp;</td> 
      </tr> 
      <tr> 
       <th colspan="5"><hr></th> 
      </tr> 

      % for name in dirnames: 
      <tr> 
       <td valign="top"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII= " 
        alt="[DIR]"></td> 
       <td><a href="${name}">${name}</a></td> 
       <td align="right">${time}</td> 
       <td align="right">-</td> 
       <td>&nbsp;</td> 
      </tr> 
      % endfor 
      % for name in filenames: 
      <tr> 
       <td valign="top"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABHUlEQVR42o2RMW7DIBiF3498iHRJD5JKHurL+CRVBp+i2T16tTynF2gO0KSb5ZrBBl4HHDBuK/WXACH4eO9/CAAAbdvijzLGNE1TVZXfZuHg6XCAQESAZXbOKaXO57eiKG6ft9PrKQIkCQqFoIiQFBGlFIB5nvM8t9aOX2Nd18oDzjnPgCDpn/BH4zh2XZdlWVmWiUK4IgCBoFMUz9eP6zRN75cLgEQhcmTQIbl72O0f9865qLAAsURAAgKBJKEtgLXWvyjLuFsThCSstb8rBCaAQhDYWgIZ7myM+TUBjDHrHlZcbMYYk34cN0YSLcgS+wL0fe9TXDMbY33fR2AYBvyQ8L0Gk8MwREBrTfKe4TpTzwhArXWi8HI84h/1DfwI5mhxJamFAAAAAElFTkSuQmCC " 
        alt="[DIR]"></td> 
       <td><a href="${name}">${name}</a></td> 
       <td align="right">${time}</td> 
       <td align="right">-</td> 
       <td>&nbsp;</td> 
      </tr> 
      % endfor 
      </p> 
     </tbody> 
    </table> 
</body> 
</html> 
""" 

EXCLUDED = ['index.html'] 

import os 
import argparse 

# May need to do "pip install mako" 
from mako.template import Template 

def fun(dir,rootdir): 
    print('Processing: '+dir) 
    filenames = [fname for fname in sorted(os.listdir(dir)) 
       if fname not in EXCLUDED and os.path.isfile(dir+fname)] 
    dirnames = [fname for fname in sorted(os.listdir(dir)) 
      if fname not in EXCLUDED ] 
    dirnames = [fname for fname in dirnames if fname not in filenames] 
# header = os.path.basename(dir) 
    f = open(dir+'/index.html','w') 
    print(Template(INDEX_TEMPLATE).render(dirnames=dirnames,filenames=filenames, header=dir,ROOTDIR=rootdir,time=time.ctime(os.path.getctime(dir))),file=f) 
    f.close() 
    for subdir in dirnames: 
     try: 
      fun(dir+subdir+"/",rootdir+'../') 
     except: 
      pass 

def main(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument("directory") 
    parser.add_argument("--header") 
    args = parser.parse_args() 
    fun(args.directory+'/','../') 

if __name__ == '__main__': 
    main() 
Смежные вопросы