http.server
предназначен для очень простых случаев использования и служит примером кода. 1 Именно поэтому документы ссылаются прямо на источник.
Это означает, что по конструкции у него не так много настроек конфигурации; вместо этого вы конфигурируете его, читая исходный код и выбирая, какие методы вы хотите переопределить, а затем создавая подкласс, который делает это.
В этом случае вы хотите переопределить list_directory
. Вы можете увидеть, как работает версия базового класса, и написать свою собственную версию, которая выполняет другие функции - либо используйте scandir
вместо listdir
, либо просто вызовите stat
для каждого файла, а затем определите, как вы хотите встроить результаты в собственный HTML-код.
Поскольку в этом нет особого смысла, кроме как в качестве учебного упражнения, я не дам вам полный код, но вот скелет:
class StattyServer(http.server.HTTPServer):
def list_directory(self, path):
try:
dirents = os.scandir(path)
except OSError:
# blah blah blah
# etc. up to the end of the header-creating bit
for dirent in dirents:
fullname = dirent.path
displayname = linkname = dirent.name
st = dirent.stat()
# pull stuff out of st
# build a table row to append to r
1. Хотя на самом деле это пример кода для устаревшего и неуклюжего способа построения серверов, так что, возможно, это должно быть «служить примером кода для понимания устаревшего кода, на который вам, вероятно, никогда не придется смотреть, но на всякий случай…».