为什么Django在视图被调用时不设置cookie

qkf9rpyu  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(95)

我正在尝试基于带有复选框的表单来设置和取消设置Django cookie。选中复选框后,我希望设置cookie。
将复选框的值传递给视图可以正常工作,但设置和取消设置cookie则不能正常工作。
这是一种观点:

def filter(request):

    tasks = list()

    if request.POST.get('today') == 'yes':
        tasks.extend(Task.objects(when='today'))
        print('get tasks today')

    response = render(request, 'index.html', {'tasks': tasks})

    if request.POST.get('today') == 'yes':
         response.set_cookie('today', 'yes')
         print('set cookie today')
    else:
        response.set_cookie('today', 'no')
        print('cookie not set today')

    return response

字符串
是否设置cookie由以下代码决定:

{{request.COOKIES.today}}
<form action="filter" method="POST">
    {% csrf_token %}
    <input type="checkbox" name="today" value="yes" {% if request.COOKIES.today == 'yes' %}checked{% endif %}> Today</div>
    <input type="submit" value="Show" class="btn btn-warning col-12 btn-sm"/>
</form>


在我的模板中,我使用{{request.COOKIES.today}}来检查cookie的值。发生的事情很奇怪。如果我单击复选框,cookie不会像我所期望的那样被设置,并且当页面重新加载时,复选框也不会被选中。但如果我再次选中复选框,则cookie被设置并选中复选框。
我在哪里犯了错,或者错过了什么。我正在尝试在第一次提交表单时设置cookie。

0mkxixxg

0mkxixxg1#

我通过使用HttpResponseRedirect对象“解决”了这个问题
设置cookie后,我重定向到一个视图,该视图读取cookie并列出与cookie对应的“时间段”内的任务。

def filter(request):
    response = HttpResponseRedirect('/index')
    if request.POST.get('today') == 'yes':
         response.set_cookie('today', 'yes')
         print('set cookie today')
    else:
        response.set_cookie('today', 'no')
        print('cookie not set today')
    return response

def index(request):
     tasks = list()
     if request.COOKIES.get('today') == 'yes':
         tasks.extend(Task.objects(when='today'))
     return render(request, 'index.html', {'tasks': tasks})

字符串

相关问题