Как прочитать текстовый файл и показать содержимое в textarea с помощью python?

У меня есть приложение django. И я могу загружать файлы. Но теперь я хочу показать текст из текстового файла в текстовой области.

У меня есть следующее:

forms.py:


class ProfileForm(forms.Form):
    upload_file = forms.FileField()

models.py:

class UploadFile(models.Model):
    image = models.FileField(upload_to="images")

vieuws.py:

class CreateProfileView(View):
    def get(self, request):
        form = ProfileForm()
        return render(request, "main/create_profile.html", {
            "form": form
        })

    def post(self, request):
        submitted_form = ProfileForm(request.POST, request.FILES)

        if submitted_form.is_valid():
            uploadfile = UploadFile(image=request.FILES["upload_file"])
            uploadfile.save()
            return HttpResponseRedirect("/")

        return render(request, "main/create_profile.html", {
            "form": submitted_form
        })

и html-файл:

{% load static %}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Create a Profile</title>
    <link rel="stylesheet" href="{% static "main/styles/styles.css" %}">
  </head>
  <body>
    <form action="/" method="post" enctype="multipart/form-data">
      {% csrf_token %} {{ form }}
      <button type="submit">Upload!</button>
    </form>   

    <textarea name="" id="" cols="30" rows="10"></textarea>
  </body>
</html>

И у меня есть этот текстовый файл: yes.txt с таким содержанием: Да, мы можем.

Так что мой вопрос: как вывести этот текст в textarea?

Спасибо

Вы можете получить текст загруженного файла в представлении и добавить его как сообщение (не забудьте импортировать messages из django.contrib в файле views.py), а затем отобразить его внутри textarea. Мой код выглядит следующим образом и работает

views.py

    def post(self, request):
        submitted_form = ProfileForm(request.POST, request.FILES)
        if submitted_form.is_valid():
            uploadfile = UploadFile(my_file=request.FILES["upload_file"])
            uploadfile.save()
            # Get the text of the file of the instance
            with open(uploadfile.my_file.path) as f:
                lines = f.readlines()
            # Add the text as message
            messages.add_message(request, message=lines, level=messages.INFO)
            return HttpResponseRedirect("/")
        return render(request, "create_profile.html", {
        "form": submitted_form
        })

template.html*

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Create a Profile</title>
    <link rel="stylesheet" href="{% static "main/styles/styles.css" %}">
</head>
<body>
<form action="/" method="post" enctype="multipart/form-data">
    {% csrf_token %} {{ form }}
    <button type="submit">Upload!</button>
</form>
{% for message in messages %}
    {% if message %}
        <textarea name="" id="" cols="30" rows="10" >{{ message }}</textarea>
    {% endif %}
{% endfor %}

Не используйте сообщения, которые появляются только один раз в качестве уведомлений, вместо этого используйте следующим образом.

views.py:

from django.conf import settings
import os


class CreateProfileView(View):
    def get(self, request):
        form = ProfileForm()
        return render(request, "main/create_profile.html", {
            "form": form
        })

    def post(self, request):
        submitted_form = ProfileForm(request.POST, request.FILES)
        content = ''

        if submitted_form.is_valid():
            uploadfile = UploadFile(image=request.FILES["upload_file"])
            uploadfile.save()
            with open(os.path.join(settings.MEDIA_ROOT,
                                   f"{uploadfile.image}"), 'r') as f:
                content = f.read()

            print(content)
            return render(request, "main/create_profile.html", {
                'form': ProfileForm(),
                "content": content
            })

        return render(request, "main/create_profile.html", {
            "form": submitted_form,
        })

main/create_profile.html:

<form action="/" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
     {{ form }}
    <button type="submit">Upload!</button>
</form>   
{% if content %}
    <textarea name="" id="" cols="30" rows="10">{{content}}</textarea>
{% endif %}
Вернуться на верх