【问题标题】:Custom template tag to get a remaining days in Django自定义模板标签以获取 Django 中的剩余天数
【发布时间】:2013-10-08 13:33:19
【问题描述】:

我有一个这样的模型:

class WeddingDate(models.Model):
    user = models.ForeignKey(User)
    date = models.DateField(help_text="Date should be in 1991-07-22 format!")

用户输入他们的婚礼日期。而且,我在base.html 中找到了他们婚礼和表演的剩余天数。我正在尝试为它创建一个自定义模板标签。

我创建了一个名为 templatetags 的目录并创建了一个名为 remainingdays.py 的文件

from models import WeddingDate
from django import template
from datetime import date

register = template.Library()

def get_remaining_day(user):
    date = WeddingDate.objects.get(pk=user)
    current_date = date.today()
    days = date.date - current_date
    return days.days 

现在,我如何在模板中显示它,例如{% get_remaining_day %}

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    首先,您需要选择要编写的模板标签类型。使用assignment tag 可能是最简单的。您还需要 register the template tag 以便它在您的模板中可用:

    在您的函数下方:

    def get_remaining_day(user):
        ...
    register.assignment_tag('get_remaining_day', get_remaining_day)
    

    或作为装饰者:

    @register.assignment_tag(name='get_remaining_day')
    def get_remaining_day(user):
        ...
    

    现在你可以从你的模板中调用它:

    {% get_remaining_day as day %}
    {{ day }}
    

    【讨论】:

    • 我在 Django 1.5 中找不到 Assignment Tag
    • 他们在那里:docs.djangoproject.com/en/1.5/howto/custom-template-tags/…。或者,您可以使用“简单标签”并直接打印日期。不管怎样,你仍然需要注册你的标签才能在你的模板中使用它
    • Invalid block tag: 'get_remaining_day', expected 'endblock'我用过Assignment Tag
    • @user2032220 你应该阅读整个文档页面。您需要在模板中加载标签库。
    猜你喜欢
    • 2015-01-20
    • 2021-07-13
    • 2012-03-15
    • 2015-09-03
    • 1970-01-01
    • 2015-12-17
    • 2015-02-28
    • 2011-03-31
    相关资源
    最近更新 更多