【问题标题】:Why is this template function call not working?为什么这个模板函数调用不起作用?
【发布时间】:2012-02-12 21:58:27
【问题描述】:

我的 models.py 中有以下代码:

class DealInstance(models.Model):
    start = models.DateTimeField()
    end = models.DateTimeField()

    def get_remaining_time(self):
        return end - start # returns a datetime.timedelta object

我现在想在我的模板中使用 get_remaining_time 函数:

<p>Time diff: {{ deal_instance.get_remaining_time.days }}</p>

但这不起作用,即使我将 get_remaining_time 更改为返回字符串文字。

此代码基于https://docs.djangoproject.com/en/dev/topics/templates/#accessing-method-calls

【问题讨论】:

  • 您是否收到任何错误消息? (例如,你应该有return self.end - self.start
  • 没有错误信息。它加载视图很好,除了它不显示模板函数调用的任何输出。 return self.end - self.start 并没有什么不同。
  • 你在调试方面做了什么? (例如,如果你的方法只是输出一个字符串呢?一个日期时间?)
  • 我试图让函数返回一个字符串文字和其他一些东西——在渲染视图中没有产生任何输出。
  • 也许您的deal_instance 没有开始和/或结束设置?在这种情况下,get_remaining_time 可能会返回 null。尝试调试它。在return 之前在get_remaining_time 方法中打印。也可以尝试在不使用days 的情况下使用{{ deal_instance.get_remaining_time }},看看发生了什么。

标签: python django django-models django-templates


【解决方案1】:

尝试打印(从模板中)表达式的每个部分。例如。 [{{deal_instance}}] [{{deal_instance.get_remaining_days}}] [{{deal_instance.get_remaining_days.days}}] (注​​意:我在表达式周围使用 [] 以便空字符串可见)。您可能会发现其中一个是无效的,而有些过于友好的模板解析器只是返回一个空字符串。

另外,查看返回页面的来源。如果表达式的输出是一个对象引用,那么默认情况下它将以&lt; some sort of class info &gt; 格式打印出来,大多数浏览器会将其视为伪造的 HTML 标签并忽略它。

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多