簡體   English   中英

django - 如何在模板中插入上傳文件的內容?

[英]django - How to insert the content of uploaded file in template?

假設我在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>')

我真的很想知道原因。

您可以為具有FileField的類定義一個方法,如果您想要多做FileField do的read方法,例如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方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM