Tôi chỉ đang học Python & Django. (Cảm ơn tất cả những người đóng góp ở đây - đó là một nguồn tài nguyên vô giá!)Liệt kê nội dung tệp thư mục trong mẫu Django
Một điều đơn giản mà tôi đang gặp phải là hiển thị danh sách các tệp tĩnh đơn giản (nói nội dung của một thư mục lưu trữ trên máy chủ) dưới dạng danh sách các liên kết có thể tải xuống. Cho dù đây là an toàn hay không là một câu hỏi khác, nhưng cho rằng tôi muốn làm điều đó ...
bài này đã giúp chỉ đạo cho tôi đi đúng hướng: Python directory list returned to Django template
Đoạn mã này xuất ra tên tập tin trong 'myfiles' nếu chạy từ lời nhắc:
path= os.path.dirname(os.path.abspath(__file__))
myfiles = os.path.join(path, 'myfiles')
os.chdir(myfiles)
for files in os.listdir("."):
print files
Nhưng làm cách nào để chuyển các tệp này vào mẫu Django và tạo danh sách liên kết? Tôi nghĩ rằng tôi có thể phải tạo một từ điển Python/tuple của một số loại để làm cho nó iterable, vượt qua nó như là một biến mẫu và render nó trong một vòng lặp for?
Tôi có phải thêm mục nhập vào tệp urls.py của mình để thực hiện tác phẩm này không? Một cái gì đó như thế này?
(r'^myfiles/(?P<path>.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.dirname(__file__), 'myfiles'), 'show_indexes': True}),
Cảm ơn sự giúp đỡ của bạn! Tôi chỉ đang học và tôi không thể tìm ra cách thực hiện điều này từ các đoạn mã hiện có trực tuyến.
EDIT: Đây là những gì tôi đã có trong views.py của tôi: (bạn sẽ nhận thấy từ '\\' mà tôi đang trên một hệ thống Windows)
def myfiles_page(request):
path = os.path.dirname(os.path.abspath(__file__))
myfiles = os.path.join(path, 'myfiles\\')
os.chdir(myfiles)
x = 0
d = {}
for file in os.listdir("."):
d[x] = (myfiles + file)
x = x + 1
variables = RequestContext(request, {
'user' : request.user,
'filedict' : d,
})
return render_to_response('myfiles_page.html', variables)
Đây là cách tôi đã cố gắng để làm cho nó hiển thị trong một khuôn mẫu: (theo Django documentation)
{% for key, value in filedict %}
{{ key }}: {{ value }}
{% endfor %}
Nhưng 'filedict' vẫn không hiển thị bất cứ điều gì trong mẫu. Bất kỳ ý tưởng?
+1 cho cảnh báo bảo mật chất béo lớn. –
Cảm ơn phản hồi Spacedman - nhưng phần khó nhất đối với tôi là viết chức năng views.py để xây dựng danh sách các dicts từ os.listdir, trong đó mỗi dict có một tên và một url. Tôi biết nó cơ bản, nhưng có ý tưởng nào không? – fieryred
Những gì tôi đã kết thúc với: def create_filedict (thư mục): \t x = 0 \t d = {} \t for file in os.listdir (thư mục): \t \t d [x] = (file) \t \t x = x + 1 \t trả về {'dict': d, 'size': x} – fieryred