2012-11-16 29 views
6

Tôi gặp sự cố khi mở tệp văn bản trong django được lưu trữ trong cơ sở dữ liệu của tôi. Tôi muốn truy cập thông qua FileField của mô hình của tôi ... mô hình trông giống như thế nàycách lấy (txt) nội dung tệp từ FileField?

class MyModel(models.Model): 
     saved_file = FileField() 

Tôi tải lên tệp kiểm tra qua giao diện quản trị, hoạt động tốt. Theo quan điểm của tôi, tôi muốn truy cập tệp này. Nếu tôi mở nó với python tiêu chuẩn mở() nó hoạt động ok ...

f = open(path, 'r') 
a = f.readlines() 
return render_to_response('base.html', {'content': a}, context_instance=RequestContext(request)) 

này sẽ hiển thị dòng của file ok ... theo https://docs.djangoproject.com/en/dev/ref/models/fields/#filefield một được một proxy FieldFile khi FileField từ một mô hình được gọi là, nên

f = MyModel.objects.all().get(id=0).saved_file 

nên lưu trữ FieldFile trong f, hơn nữa tài liệu nói rằng một mở một tập tin từ mô hình bằng cách đúc .open (mode = 'rb') trên FieldFile, vì vậy

file = f.open(mode='rb') 

nên hoạt động như python .open() như đã nêu trong tài liệu. Vì vậy, để có được dòng tôi làm

file.readlines() 

phải trả về danh sách các dòng. Điều gì xảy ra là tôi nhận được một lỗi nói rằng .readlines() thuộc tính không tồn tại. Tôi không cần tệp để hiển thị nó, đây chỉ là một cách để kiểm tra xem việc mở một tệp có hoạt động hay không, nhưng tôi cần nội dung tệp trong một biến trong chế độ xem của tôi để tiếp tục sử dụng nó trong logic nghiệp vụ của mình. Bất cứ ai có thể đề xuất một cách để có được các nội dung tập tin ra khỏi một mô hình Fref FileField?

+0

Traceback của 'AttributeError' đầy đủ là gì? –

Trả lời

5

FieldFile.open mở tệp nhưng không trả lại bất cứ điều gì. Vì vậy, trong ví dụ file của bạn là None.

Bạn nên gọi các đường dây đọc trên FieldFile. Trong ví dụ của bạn, nó sẽ là:

f = MyModel.objects.all().get(id=0).saved_file 
f.open(mode='rb') 
lines = f.readlines() 
f.close() 
Các vấn đề liên quan