Как получить данные из представлений в шаблон 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 }}