django: вставка текста PDF-файла, собранного с помощью кнопки выбора файла, в текстовую область

#python #django #templates #textarea

#python #django #шаблоны #текстовая область

Вопрос:

Я новичок в Django, и в настоящее время я работаю над веб-сайтом, где у меня есть кнопка выбора файла и текстовая область. Я хочу, чтобы, когда я нажимаю на кнопку выбора файла и выбираю файл .txt или .pdf, весь текст из этого файла должен отображаться в текстовой области рядом с ним. вот графический интерфейс, вот внешний вид, но эта вещь не работает. Я перепробовал много решений, но у меня ничего не работает. Я использую python версии 3.8 и Django версии 3.1. models.py

 class text_file(models.Model):

txtfile = models.FileField()
text = models.TextField(max_length=10000)
date = models.DateTimeField(auto_now=True) #data saved into db

def __str__(self):
    return self.text_file
  

вот мой fileactions.py досье. Это модельная форма.

 from PyPDF2 import pdf, PdfFileReader
from django import forms
from .models import text_file


class filetext(forms.ModelForm):
text_file = forms.FileField(required=True, widget=forms.Textarea(
    attrs={
        'class': 'form-control',
        'placeholder': 'text_file...',
        'id': 'input1'
    }
))


class Meta:
    model = text_file #import text_file model from home models.py
    fields = {'text_file'} 

def save(self, commit=True):
    filename = input('file')
    textfile = open(filename, 'rb')
    pdf_reader = pdf.PdfFileReader(textfile)

    page_numbers = pdf_reader.getNumPages()
    title = pdf_reader.documentInfo.title
    print("the document title is: ", title)
    print("there are total: ", page_numbers, "pages")
    count = 0
    text = ''
    while count < page_numbers:
        page = pdf_reader.getPage(count)
        text  = page.extractText()
        return self.text 
    return super().save(commit) 
  

home.html

 <div id="intro">
 <div class="container">
  <div class="row">
   <div class="col-md-4">
     <form method="POST" enctype="multipart/form-data", id='textForm' method="post"/> 
     {% csrf_token %} 
     {{ form.as_p }} 
     </form> 
    </div>
    <div class="col-md-4">
                       
    </div>
    <input type="file" class="btn btn-primary" Text="choose file" id="file"><br>
   </div>
  </div>
 </div>
  

view.py

 def post_text(request):
if request.method == "POST":
    form = filetext(request.POST)
    if form.is_valid():
        text = form.cleaned_data.get('text_file')
        return render(request=request,
                      template_name="main/home.html.html",
                      context={"form": form})

form = filetext
return render(request=request,
              template_name="main/home.html",
              context={"form": form})
  

urls.py

 urlpatterns = [
         path("filetext", views.post_text, name="homepage"),
       ]
  

пожалуйста, помогите мне либо с вашими предложениями по этому коду, либо с вашим собственным примером кода. (если кто-то делает то же самое)

Комментарии:

1. Если вы просто хотите отобразить содержимое файла в текстовом поле — есть гораздо более простой способ сделать это с помощью JavsScript / jQuery. Просто откройте файл, и как только пользователь выберет его, используйте некоторую библиотеку JS для анализа и чтения файла. Затем вы можете впоследствии применить прочитанное содержимое к текстовому полю.

2. на самом деле, я намерен выполнить другие операции с этим файлом. Это все о NLP с использованием python. Этот файл загружается другими пользователями, которые заходят на этот сайт, а не мной. Я хочу извлечь текст этого файла, отобразить его текст в текстовой области, а затем выполнить операции NLP над текстом.

3. Какова ваша точная ошибка? Можете ли вы дать хотя бы трассировку ошибок, чтобы я мог разобраться в этом?

4. ошибки нет. когда я нажимаю на кнопку выбора файла, мне предлагается выбрать файл, когда я выбираю файл, его имя отображается на кнопке, заменяя текст «файл не выбран». но после этого ничего не происходит. его текст не отображался в текстовой области.

5. AzyCrw4282 пожалуйста, помогите мне своими знаниями. Я делаю свой семестровый проект, и мне нужно решить эту проблему как можно скорее.