簡體   English   中英

如何在 Django 中打開和讀取 FileField 類型的文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM