gpt4 book ai didi

python - django - 如何在模板中插入上传文件的内容?

转载 作者:太空狗 更新时间:2023-10-30 00:56:12 24 4
gpt4 key购买 nike

假设我在 FileField 中存储了一个文本文件。现在我想在网页上显示它的内容。我阅读了 django 模板文档,但没有找到执行此操作的方法。

当然,我可以在我的 View 中执行 content = f.read() 并将 content 传递给模板。有没有更好的办法?谢谢!

更好的方法 意味着我可以通过将 MyModel.objects.all() 传递给模板来完成工作。我无法读取模板中的一个文件,但应该有一些技巧。

编辑
我试过:

def display_html(self):
content = self.html_file.read()
print(content)
return content

但没有显示...

最终编辑
很奇怪下面的代码能运行

class MyModel(models.Model):
name = models.CharField()
text = models.FileField()

def display_text_file(self):
fp = open(self.text.path)
return fp.read().replace('\n', '<br>')

但是我认为等效的东西不起作用:

class MyModel(models.Model):
name = models.CharField()
text = models.FileField()

def display_text_file(self):
return self.text.read().replace('\n', '<br>')
# neither do self.text.read().decode().replace('\n', '<br>')

我很想知道原因。

最佳答案

你可以为你的类定义一个方法,它有 FileField,如果你想做的不仅仅是 FileFieldread 方法,对于例如display_text_file,然后在模板中调用它。

模型:

class MyModel(models.Model):
name = models.CharField(max_length=100)
text = models.FileField(max_length=100, upload_to='.')

def display_text_file(self):
with open(self.text.path) as fp:
return fp.read().replace('\n', '<br>')

观点:

def show_files(request):
objects = MyModel.objects.all()
return render_to_response('show_files.html', {'objects': objects},
context_instance=RequestContext(request))

模板:

{% for obj in objects %}

<p>
file name: {{obj.name}} <br>
file content: {{obj.display_text_file}}
</p>

{% endfor %}

对于打开文件的方式,在display_text_file中,所有这些方式都适用于我:

def display_text_file(self):
with open(self.text.path) as fp:
return fp.read().replace('\n', '<br>')

def display_text_file(self):
self.text.open() # reset the pointer of file, needs if you need to read file more than once, in a request.
return self.text.read().replace('\n', '<br>')

def display_text_file(self):
self.text.open() # reset the pointer of file, needs if you need to read file more than once, in a request.
return self.text.file.read().replace('\n', '<br>')

self.text 的类型是django.db.models.fields.files.FieldFile 并且有以下方法:

['DEFAULT_CHUNK_SIZE', 'chunks', 'close', 'closed', 'delete', 'encoding', 'field', 'file', 
'fileno', 'flush', 'instance', 'isatty', 'multiple_chunks', 'name', 'newlines', 'open', 'path',
'read', 'readinto', 'readline', 'readlines', 'save', 'seek', 'size', 'softspace', 'storage', 'tell',
'truncate', 'url', 'write', 'writelines', 'xreadlines']

self.text.file 的类型是django.core.files.base.File 并且有以下方法:

['DEFAULT_CHUNK_SIZE', 'chunks', 'close', 'closed', 'encoding', 'file', 
'fileno', 'flush', 'isatty', 'mode', 'multiple_chunks', 'name', 'newlines', 'open',
'read', 'readinto', 'readline', 'readlines', 'seek', 'size', 'softspace', 'tell',
'truncate', 'write', 'writelines', 'xreadlines']

而且他们都有read方法。

关于python - django - 如何在模板中插入上传文件的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21046741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com