Tôi đang viết một trang web dựa trên Django, nhưng cần phải phục vụ một tệp văn bản đơn giản. Là cách chính xác để điều này bằng cách đặt nó trong thư mục tĩnh và bỏ qua Django?Tôi làm cách nào để phân phát tệp văn bản từ Django?
Trả lời
Nếu tệp là tĩnh (không được tạo bởi ứng dụng django) thì bạn có thể đặt tệp đó vào thư mục tĩnh.
Nếu nội dung của tệp này được tạo bởi Django thì bạn có thể trả lại trong một HttpResponse với text/plain
làm mimetype.
content = 'any string generated by django'
return HttpResponse(content, content_type='text/plain')
Bạn cũng có thể đặt tên cho tệp bằng cách đặt Content-Disposition
phản hồi.
filename = "my-file.txt"
content = 'any string generated by django'
response = HttpResponse(content, content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
return response
['Có một ví dụ trong tài liệu dành cho tệp PDF] (https://docs.djangoproject.com/en/dev/howto/outputting-pdf/), cho biết cách đặt mimetype không phải HTML trên Django ' HttpResponse'. –
Có thể thêm tên tệp cụ thể vào tệp được tạo từ nội dung @luc ?? – chuseuiti
@chuseuiti Có, tôi đã cập nhật câu trả lời của mình – luc
Tôi đồng ý với @luc, tuy nhiên một cách khác là sử dụng tiêu đề X-Accel-Redirect
.
Hãy tưởng tượng rằng bạn phải phục vụ các tệp tĩnh được bảo vệ (phải đăng nhập để xem nó). Nếu bạn đặt tệp trong thư mục tĩnh, thì truy cập của nó sẽ mở và bất kỳ ai cũng có thể xem tệp. Nếu bạn phục vụ nó trong Django bằng cách mở tập tin và sau đó phục vụ nó, có quá nhiều IO và Django sẽ sử dụng RAM nhiều hơn vì nó có để tải các tập tin vào RAM. Giải pháp là để có một cái nhìn, mà sẽ xác thực một người dùng chống lại một cơ sở dữ liệu, tuy nhiên thay vì trả lại một tập tin, Django sẽ thêm tiêu đề X-Accel-Redirect
để đáp ứng của nó. Bây giờ kể từ khi Django là đằng sau nginx, nginx sẽ thấy tiêu đề này và sau đó nó sẽ phục vụ các tập tin tĩnh được bảo vệ. Đó là tốt hơn nhiều bởi vì nginx là tốt hơn và nhiều faste lúc phục vụ các tập tin tĩnh so với Django. Here là tài liệu nginx về cách thực hiện điều đó. Bạn cũng có thể làm một điều tương tự trong Apache, tuy nhiên tôi không nhớ tiêu đề.
Câu trả lời thú vị. Cảm ơn – luc
Tôi đã có yêu cầu tương tự để nhận mẫu văn bản cho biểu mẫu qua AJAX. Tôi chọn triển khai nó với chế độ xem dựa trên mô hình (Django 1.6.1) như sau:
from django.http import HttpResponse
from django.views.generic import View
from django.views.generic.detail import SingleObjectMixin
from .models import MyModel
class TextFieldView(SingleObjectMixin, View):
model = MyModel
def get(self, request, *args, **kwargs):
myinstance = self.get_object()
content = myinstance.render_text_content()
return HttpResponse(content, content_type='text/plain; charset=utf8')
Văn bản được hiển thị khá nhỏ và được tạo động từ các trường khác trong mô hình.
- 1. Làm cách nào để tạo văn bản NLTK của riêng tôi từ một tệp văn bản?
- 2. Tôi nên phát hiện dấu phân cách nào được sử dụng trong tệp văn bản?
- 3. Làm cách nào để truy cập tệp văn bản từ trong chiến tranh của tôi
- 4. Làm cách nào để phân biệt giữa các tệp 'nhị phân' và 'văn bản'?
- 5. Làm cách nào để xác định tệp nhị phân và tệp văn bản bằng Python?
- 6. Làm cách nào để phân phát tệp .flv bằng PHP?
- 7. Làm cách nào để phân tích cú pháp tệp văn bản bằng cách sử dụng javascript
- 8. Tôi làm cách nào để phân tích tệp .hprof?
- 9. Làm cách nào để phân tách văn bản đã cho thành các từ trong từ điển?
- 10. Làm cách nào để phân phát tệp tĩnh qua Rack?
- 11. Làm cách nào để tạo một bản tóm tắt băm MD5 từ một tệp văn bản?
- 12. Làm cách nào để phân tích cú pháp tệp văn bản trong Mục tiêu-C?
- 13. Tôi làm cách nào để phát tệp mp3?
- 14. Làm cách nào để đọc tệp văn bản từ thẻ SD trong Android?
- 15. Làm cách nào để nối văn bản vào một tệp?
- 16. Làm cách nào để phát hiện mất tập trung từ đối tượng chỉnh sửa văn bản?
- 17. Làm cách nào để trích xuất/phân tích dữ liệu bảng từ một tệp văn bản trong Perl?
- 18. Phân tích tệp văn bản trong Java
- 19. Làm cách nào để nối văn bản vào một tệp văn bản trong C++?
- 20. Làm cách nào để tách văn bản thành các từ?
- 21. Cách đọc tệp văn bản đang phát triển trong C++?
- 22. Làm cách nào để tôi phát hiện các thứ nguyên quảng cáo được phân phát
- 23. Tôi làm cách nào để gọi một cuộc gọi subprocess thành tệp văn bản?
- 24. Làm cách nào để phân phát tệp âm thanh để phát trực tuyến từ Grails bằng mã 206?
- 25. Cách tốt nhất để trích xuất văn bản từ tệp văn bản 1.3GB bằng PHP?
- 26. Làm cách nào để in văn bản từ vùng văn bản?
- 27. Làm cách nào để viết tập lệnh sed vào thông tin grep từ tệp văn bản
- 28. Làm cách nào để xuất tất cả mã nguồn từ Visual Studio sang tệp văn bản?
- 29. Làm cách nào để đọc trong các dòng từ một tệp văn bản trong OCaml?
- 30. Làm cách nào để trích xuất văn bản từ tệp PSD?
Có, nếu tệp là văn bản thuần túy (không có nội dung động) thì đó là chính xác. –