Django에서 "None Type is not iterable"수정

5727 단어 django

에러 메시지





중단점 디버그에 따르면 내가 정의한 컨텍스트 프로세서로 인해 발생하는 것으로 나타났습니다.

먼저 댓글을 달아주세요.

# settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates', os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                # 'food.context_processors.access_realtime_cart_count'
            ],
        },
    },
]


이유



이 줄에 주석을 달면 애플리케이션이 정상 상태로 전환됩니다.

컨텍스트 프로세서가 로그인 페이지에 필요한 컨텍스트를 변경한 것 같습니다.

처음으로 시스템에 들어갈 때 우리는 승인되지 않은 상태에 있습니다. 따라서 이 상황을 처리해야 합니다.

해결책



컨텍스트 프로세서를 선언하는 올바른 방법은 다음과 같습니다.

### food/context_processors.py
from .models import OrderItem, Order


# the order item number of you current cart
def access_realtime_cart_count(request):
    if request.user.is_authenticated:
        try:
            active_order = Order.objects.get(user__username=request.user.username, status=1)
        except Order.DoesNotExist:
            newOrder = Order(user=request.user, total_price=0.0, status=1)
            newOrder.save()
            active_order = newOrder
        cart_count = OrderItem.objects.filter(order_id=active_order.id).count()
        return {'realtimeCartCount': cart_count} # you can access the "cart_count" variable in any tempaltes of your projec
    else: # handle the unlogin 
        return {'realtimeCartCount': 0}

좋은 웹페이지 즐겨찾기