Как прочитать текстовый файл и показать содержимое в 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 %}