【发布时间】:2021-02-25 19:09:48
【问题描述】:
我正在尝试打开一个将通过 django FileField 属性上传的文件。我还想读取文件的内容并将其输出。但是当我打开(obj.file)时,它给了我一个错误,上面写着“预期的 str、字节或 os.PathLike 对象,而不是 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)
这是models.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']
感谢您的任何回答!
【问题讨论】:
-
在您的模板中也使用
{% if text %}而不是{% if not text == None %}。并将action attribute添加到您的html 表单中:action="/your-name/"