说我在FileField中存储了一个文本文件。现在我想在网页上显示其内容。我阅读了django模板文档,但没有找到办法。
我当然可以在我的观看中content = f.read()
并将content
传递给模板。有没有更好的办法?谢谢!
better way
意味着我可以通过将MyModel.objects.all()
传递给模板来完成工作。我不能read
模板中的文件,但应该存在某种黑客攻击。
修改
我试过了:
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>')
我真的想知道原因。
答案 0 :(得分:7)
如果您要为FileField
read
方法执行FileField
以上的方法,则可以为您的班级定义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
他们都有{{1}}方法。