【问题标题】:Django templates - correct method to use variablesDjango 模板 - 使用变量的正确方法
【发布时间】:2014-07-26 15:56:49
【问题描述】:

我刚开始使用 Django,我有以下场景:

我有一个模型类Video,我通过辅助方法计算它的长度,它不是属性(至少目前)。

所以我在 Video 类中使用了一个方法,这样我们就可以在 Video 对象上调用该方法,例如

length = video_obj.video_length()

以秒为单位获取长度

我的问题是在页面上列出一组视频时(我只是遍历模板中的视频并且没有传递给模板的 Video 对象),如何以minutes:seconds 格式显示长度

我想到了以下 -

  • 在控制器中为该页面调用 video_length() 函数,然后将值作为自定义变量传递,但这又不是视频特定的(我不会遍历控制器中的视频)

  • 不得已将其添加为属性

请提出最佳的实施方式。提前感谢您的建议。

【问题讨论】:

    标签: python django templates variables video


    【解决方案1】:

    您可以在方法上方添加@property 装饰器,并在您的模板中访问video.video_length

    https://docs.python.org/2/library/functions.html#property

    如果它以秒的整数形式返回,那么您可以轻松创建一个过滤器将其转换为分钟:秒。

    【讨论】:

    • 感谢您的回答..我结合了您的两个建议来解决我的问题!
    【解决方案2】:

    您可以/应该 write a custom filter 完成此任务,因为知道如何格式化日期不是控制器的责任,而是模板。

    然后您可以为胖模型的情况辩护,我完全赞成,但是您可能想再次更改另一个视图的格式,并且拥有许多不同的格式方法只会使您的类膨胀。

    import datetime
    
    def formatted_length(value):
        """ 
           Formats the time in seconds to time in hours:minutes:seconds
        """
        return str(datetime.timedelta(seconds=value))
    

    然后你可以在你的模板中像这样使用它

    {{ video_obj.video_length|formatted_length }}
    

    【讨论】:

    • 感谢您的回答..我结合了您的两个建议来解决我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2012-09-12
    • 1970-01-01
    • 2019-08-30
    • 2012-01-19
    • 1970-01-01
    • 2012-04-14
    相关资源
    最近更新 更多