如何通过Django中的函数更改日期时间值?

时间:2018-12-02 17:46:53

标签: django datetime

我在上下文处理器中有代码,使用我创建的功能通过{{date}}标签在导航栏中显示日期:

import datetime

def date(request):
nav_date = datetime.date.today()
return {
    "date" : nav_date
}

但是,我想创建一个更改日期的函数,以便每当在html代码中单击一个按钮时,该函数就会将nav_date变量的日期推后1天。

 def next_day(request):
 # add 1 to nav_date and return value

3 个答案:

答案 0 :(得分:0)

使用timedelta函数添加/减去天。

nav_date = nav_date + datetime.timedelta(days=1)

答案 1 :(得分:0)

您需要的是前端的计数器,或者具有要增加天数的网址。

即GET /?number_of_days=1

from datetime import timedelta
from django.utils import timezone


def date(request):
    nav_date = timezone.now() + timedelta(days=request.GET.get('number_of_days', 0))
    return {
        "current_date" : nav_date.date()
    }

还有一个模板标签,可用于格式化日期。      https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#now

 It is {% now "jS F Y H:i" %}

应该是2018年12月2日18:11

答案 2 :(得分:0)

您需要具有某种通用存储空间,以便使用上下文处理器的date单击同步按钮。我在此示例中使用会话。所以你可以这样尝试:

# context processor

def date(request):
    nav_date = request.session.get('nav_date')
    if nav_time:
       nav_time=datetime.datetime.strptime(nav_time, '%d-%m-%Y')
    else:
       nav_time = datetime.date.today()
    return {
        "date" : nav_date
    }

现在需要编写一个视图来更新日期并将其存储在会话中:

def update_date(request):
   nav_date = request.session.get('nav_date')
   if nav_time:
       nav_time=datetime.datetime.strptime(nav_time, '%d-%m-%Y')
   else:
       nav_time = datetime.date.today()
   updated_nav_date = nav_date + datetime.timedelta(days=1)
   request.session['nav_date'] = updated_nav_date.strftime('%d-%m-%Y')
   return HttpResponse("Date Updated")

定义网址:

path('upate-date/' update_date, name="update_date")

以以下形式使用它:

<form action='{% url "update_date" %}' method='GET'>
    <button type='submit'> Update Date</button>
</form>