如何从视图中获取数据到Django模板



从我的模型我正在上传一个文件,在我的视图中,我对文件执行一些操作。我使用Django的CBV的DetailView,在其中我得到一个对象并对其执行一些操作。现在我想要模板中的数据(在执行操作之后)。我知道如何在模板中显示文件,因为文件在模型中。但是函数不在模型中,我想在我的模板中打印它们。My models.py is:

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')

my views.py is:

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 }}

最新更新