Как получить данные из представлений в шаблон Django
Из моей модели я загружаю файл, В моих представлениях я выполняю некоторые операции над файлом .Я использую DetailView из CBV Django, В котором я получаю один объект и выполняю некоторые операции над ним. Теперь я хочу получить данные (после выполнения операций) в моем шаблоне. Я знаю, как показать файл в шаблоне, потому что файл находится в модели. Но функции не находятся в моделях, и я хочу вывести их в моем шаблоне. Мой models.py выглядит так:
class FileUpload(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, blank=True , null=True)
file = models.FileField(upload_to='files')
def get_absolute_url(self):
return reverse('home')
мой views.py имеет вид :
class PostDetailView(DetailView):
context_object_name = "object_list"
template_name = "post_detail.html"
def get_object(self, *args,**kwargs):
request = self.request
pk = self.kwargs.get('pk')
instance = FileUpload.objects.get(id = pk) #I want to print this instance
if instance is None:
raise Http404("File Does not EXIST")
else:
pdfFileObj = open(instance.file.path, 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
print('number of pages = ',pdfReader.numPages)
pageObj = pdfReader.getPage(0)
print(pageObj.extractText()) #I want to print this
query = pageObj.extractText()
for j in search(query, tld="co.in", num=10, stop=10, pause=2):
print(j) #I want to print this
pdfFileObj.close()
return instance
Попробуйте сначала добавить кверисет как FileUpload.objects.all(), чтобы ваше детальное представление знало, где автоматически найти ваш объект. Таким образом, вам не придется писать свои собственные get_object.
Затем вы можете переместить все эти обработки в get_context_data, а затем передать их в шаблон, если вы хотите их отобразить, вот так:
class PostDetailView(DetailView):
context_object_name = "object_list"
template_name = "post_detail.html"
queryset = FileUpload.objects.all()
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
pdfFileObj = open(self.object.file.path, 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
print('number of pages = ',pdfReader.numPages)
pageObj = pdfReader.getPage(0)
extracted_text = pageObj.extractText())
query = pageObj.extractText()
search_results = []
for j in search(query, tld="co.in", num=10, stop=10, pause=2):
search_results.append(j)
pdfFileObj.close()
context['extracted_text'] = extracted_text
context['search_results'] = search_results
return context
Затем вы должны иметь возможность использовать их в своем шаблоне:
{{ extracted_text }}
{{ search_results }}
А чтобы вывести экземпляр, просто используйте:
{{ object }}