【问题标题】:How to get file size in template?如何在模板中获取文件大小?
【发布时间】:2012-02-24 01:48:12
【问题描述】:

我有 CharField 的模型:

absolute_path_to_file = models.CharField(max_length=255)

我想以这个文件的模板大小显示。怎么做?过滤?

{{ object.absolute_path_to_file|<????>size</????> }}

【问题讨论】:

  • 为什么这个字段是 CharField?应该是 FileField
  • 有时字段的原始数据可能不是文件本身而是外部文件源的路径,这可能是使用CharField而不是FileField的原因,认为显然是一种设计决定。

标签: django django-template-filters


【解决方案1】:

这是一种使用“自定义过滤器”的方式:

import os
from django import template

register = template.Library()

@register.filter
def filesize(value):
    """Returns the filesize of the filename given in value"""
    return os.path.getsize(value)

该代码应该在您的 django 应用程序中的“templatetags”文件夹中,例如在名为“utils.py”的 python 模块中。然后,要在模板中使用过滤器,这是一个示例:

{% load utils %}
{{ object.absolute_path_to_file|filesize }}

您也可以像这样对过滤器进行动画处理:

{{ object.absolute_path_to_file|filesize|filesizeformat }}

【讨论】:

  • 在 Django 1.6 中不需要自定义过滤器。您可以像这样在对象上使用 file.size 属性:object.file.size|filesizeformat
  • 没错,但出于任何原因,Nips 说他必须使用 absolute_path_to_file 并且他不能更改为 FileField
  • 谢谢,但是'utils' is not a registered tag library. Must be one of:..
【解决方案2】:

如果您不能使用FileField,那么您可以创建一个custom filter,它接受参数并尝试使用标准Python os.path 模块获取该参数的文件大小。

【讨论】:

    【解决方案3】:

    改用FileField,就可以了

    {{ object.absolute_path_to_file.size }}
    

    【讨论】:

    猜你喜欢
    • 2010-11-25
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    相关资源
    最近更新 更多