我在上下文处理器中有代码,使用我创建的功能通过{{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
答案 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>