[英]How To Open and Read a File of Type FileField in Django?
我正在嘗試打開一個將通過 django FileField 屬性上傳的文件。 我也想讀取文件的內容和output吧。 但是當我打開(obj.file)時,它給了我一個錯誤,上面寫着“預期的str,字節或os.PathLike object,而不是FieldFile”所以,我不知道如何解決這個問題。 我也嘗試使用 obj.file,read(),這可以完成工作。 但它在輸出中給出了這些 "\n" "\r" 字符。
這是我的意見.py
from django.shortcuts import render
from .forms import ReaderForm
def HomePage(request):
text = None
if request.method == "POST":
form = ReaderForm(request.POST or None, request.FILES or None)
if form.is_valid():
file = form.cleaned_data.get('file')
obj = form.save(commit=False)
obj.file = file
obj.save()
f = open(obj.file, "r")
print(f.read())
else:
form = ReaderForm()
context = {
"form": form,
"text": text
}
return render(request, "reader/home.html", context)
這是模型.py
from django.db import models
from django.utils import timezone
class Reader(models.Model):
file = models.FileField(blank=True, null=True)
date_uploaded = models.DateTimeField(default=timezone.now)
class Meta:
ordering = ['-date_uploaded']
verbose_name_plural = "Reader"
這是我的模板文件(home.html)
{% extends 'reader/base.html' %}
{% block head %}
<title>File Reader</title>
{% endblock %}
{% block content %}
<h1>File Reader</h1>
<form method="POST" enctype="multipart/form-data"> {% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% if not text == None %}
<p>{{ text }}</p>
{% endif %}
{% endblock %}
最后,forms.py
from .models import Reader
from django import forms
class ReaderForm(forms.ModelForm):
class Meta:
model = Reader
fields = ['file']
感謝您的任何回答!
FieldFile
object 包括它自己的打開。 代替:
f = open(obj.file,'r')
做這個:
f = obj.file.open('r')
FileField
( Django docs ) 有一個path
屬性。
所以你可以這樣做:
f = open(obj.file.path, "r")
print(f.read())
或者,如評論中所建議,使用上下文管理器:
with open(obj.file.path, "r") as f:
print(f.read())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.