每个请求两次调用Django上下文处理器

时间:2018-08-30 14:48:47

标签: python django

我发现只有这样一个主题,似乎没有一个答案可以解决。 我有两个上下文处理器:

def cart_view(request):
    try:
        cart_id = request.session['cart_id']
        cart = Cart.objects.get(id=cart_id)
        request.session['total'] = cart.items.count()
        print('OLD CART USED')
    except:
        cart = Cart()
        cart.save()
        cart_id = cart.id
        request.session['cart_id'] = cart_id
        cart = Cart.objects.get(id=cart_id)
        print('NEW CART CREATED')
    return {'cart':cart}

# dropdown menu categories to every page
def categories(request):
    print('CATEGORIES CONTEXT PROCCESOR')
    categories = Category.objects.all()
    return {'dropdown_categories':categories}

设置:

            'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            'django.template.context_processors.media',
            'shopping.views.cart_view',
            'shopping.views.categories',
             ]

通过这些打印语句,我可以看到每个请求中的每个CP都执行两次,尽管我只是渲染base.html。可能是什么问题?

import traceback; traceback.print_stack()给出两次:

P.S。我知道我每次使用CP时都会查询数据库,以后再添加缓存。

Cosole日志(加载一页):

OLD CART USED
CATEGORIES CONTEXT PROCCESOR
[30/Aug/2018 18:56:13] "GET / HTTP/1.1" 200 2651
OLD CART USED
CATEGORIES CONTEXT PROCCESOR
[30/Aug/2018 18:56:13] "GET / HTTP/1.1" 200 2651

查看:

class HomePageView(TemplateView):
    template_name = 'base.html'

项目网址:

urlpatterns = [re_path(r'^',include('shopping.urls',namespace='shop'))]

应用的网址:

urlpatterns = [re_path(r'^$',views.HomePageView.as_view(),name='home')]

1 个答案:

答案 0 :(得分:0)

好吧,我不是什么魔术,但是每页加载两次请求的问题与我的base.html中的这一行代码有关:

<img src="#" width="30" height="30" class="d-inline-block align-top" alt="">

我一删除它,一切便开始正常工作...