I have a Django application. But i can't an error that i have been struggling with for some time now.
Exception Value: 'tuple' object has no attribute 'get'
Exception Location: /Library/Python/2.7/site-packages/django/middleware/clickjacking.py in process_response, line 30
And this is the traceback django provides me.
Traceback:
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
201. response = middleware_method(request, response)
File "/Library/Python/2.7/site-packages/django/middleware/clickjacking.py" in process_response
30. if response.get('X-Frame-Options', None) is not None:
I have a hard time figuring out why this error occurs. How can i find out where that tuple
is in my code?
The view:
def products(request, category=None, gender=None, retailer_pk=None, brand_pk=None):
# If the request it doesn't have a referer use the full path of the url instead.
if not request.META.get("HTTP_REFERER", None):
referer = request.get_full_path()
else:
referer = request.META.get("HTTP_REFERER")
if gender:
products = ProductSlave.objects.filter(Q(productmatch__stockitem__stock__gt=0) &
Q(productmatch__slave_product__master_product__gender=gender)).distinct()
elif brand_pk:
products = ProductSlave.objects.filter(Q(master_product__brand__pk=brand_pk))
brand = Brand.objects.get(pk=brand_pk)
elif retailer_pk:
retailer = Retailer.objects.get(pk=retailer_pk)
products = retailer.productmatch_set.all()
else:
products = ProductSlave.objects.filter(Q(productmatch__stockitem__stock__gt=0))
if not retailer_pk:
filt = create_filtering(productslaves=products, request=request)
elif retailer_pk:
filt = create_filtering(productmatches=products, request=request)
sorting_selected = request.GET.get("sorter", None)
# q_list is used to store all the Q's
# Then they are reduced. And then filtered
if "brand" in request.GET:
brand_filtering = request.GET.get("brand", None)
if brand_filtering:
brand_filtering = brand_filtering.split("|")
q_list = []
for filter in brand_filtering:
if retailer_pk:
q_list.append(Q(slave_product__master_product__brand__slug=filter))
else:
q_list.append(Q(master_product__brand__slug=filter))
reduced_q = reduce(operator.or_, q_list)
products = products.filter(reduced_q)
if "kategori" in request.GET:
category_filtering = request.GET.get("kategori", None)
if category_filtering:
category_filtering = category_filtering.split("|")
q_list = []
for filter in category_filtering:
if retailer_pk:
q_list.append(Q(slave_product__master_product__product_category__slug=filter))
else:
q_list.append(Q(master_product__product_category__slug=filter))
reduced_q = reduce(operator.or_, q_list)
products = products.filter(reduced_q)
if "stoerrelse" in request.GET:
size_filtering = request.GET.get("stoerrelse", None)
if size_filtering:
size_filtering = size_filtering.split("|")
q_list = []
for filter in size_filtering:
if retailer_pk:
q_list.append(Q(slave_product__productmatch__stockitem__size__pk=filter))
else:
q_list.append(Q(productmatch__stockitem__size__pk=filter))
reduced_q = reduce(operator.or_, q_list)
products = products.filter(reduced_q)
if "farve" in request.GET:
color_filtering = request.GET.get("farve", None)
if color_filtering:
color_filtering = color_filtering.split("|")
q_list = []
for filter in color_filtering:
if retailer_pk:
q_list.append(Q(slave_product__sorting_color__slug=filter))
else:
q_list.append(Q(sorting_color__slug=filter))
reduced_q = reduce(operator.or_, q_list)
products = products.filter(reduced_q)
if "pris" in request.GET:
price_filtering = request.GET.get("pris", None)
if price_filtering:
price_filtering = price_filtering.split("|")
q_list = []
if retailer_pk:
q_list.append(Q(price__gte=price_filtering[0]))
q_list.append(Q(price__lte=price_filtering[1]))
else:
q_list.append(Q(productmatch__price__gte=price_filtering[0]))
q_list.append(Q(productmatch__price__lte=price_filtering[1]))
reduced_q = reduce(operator.and_, q_list)
products = products.filter(reduced_q)
if sorting_selected:
if sorting_selected == filt["sorting"][0]["name"]:
filt["sorting"][0]["active"] = True
if retailer_pk:
products = products.annotate().order_by("-price")
else:
products = products.annotate().order_by("-productmatch__price")
elif sorting_selected == filt["sorting"][1]["name"]:
if retailer_pk:
products = products.annotate().order_by("price")
else:
products = products.annotate().order_by("productmatch__price")
filt["sorting"][1]["active"] = True
elif sorting_selected == filt["sorting"][2]["name"]:
filt["sorting"][2]["active"] = True
if retailer_pk:
products = products.order_by("pk")
else:
products = products.order_by("pk")
else:
if retailer_pk:
products = products.order_by("pk")
else:
products = products.order_by("pk")
else:
if retailer_pk:
products = products.order_by("pk")
else:
products = products.order_by("pk")
if brand_pk:
return render(request, 'page-brand-single.html', {
'products': products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"brand": brand,
})
elif retailer_pk:
return (request, 'page-retailer-single.html', {
"products": products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"retailer": retailer,
})
else:
return render(request, 'page-product-list.html', {
'products': products,
"sorting": filt["sorting"],
"filtering": filt["filtering"]
})
You are returning a tuple here:
elif retailer_pk:
return (request, 'page-retailer-single.html', {
"products": products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"retailer": retailer,
})
Did you forget to add render
there perhaps:
elif retailer_pk:
return render(request, 'page-retailer-single.html', {
"products": products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"retailer": retailer,
})
在views.py 中的return
函数末尾有一个额外的逗号“,”
return render(request, 'index.html',{}), #incorrect
return render(request, 'index.html',{}) #correct
Even taking the commas of the views is as simple of a solution
as-in this
def home(request):
return render(request, 'index.html')
def hire(request):
return render(request, 'hire.html')
def handler400(request, exception):
return render(request, '400.html', locals())
def handler403(request, exception):
return render(request, '403.html', locals())
def handler404(request, exception):
return render(request, '404.html', locals())
def handler500(request, exception):
return render(request, '500.html', locals())
Rather than this
def home(request):
return render(request, 'index.html'),
def hire(request):
return render(request, 'hire.html'),
def handler400(request, exception):
return render(request, '400.html', locals()),
def handler403(request, exception):
return render(request, '403.html', locals()),
def handler404(request, exception):
return render(request, '404.html', locals()),
def handler500(request, exception):
return render(request, '500.html', locals())
Always make sure you have render after 'return', in your views functions
In my case I had not added the
return render(request, app_name/index.html
It took me a lot of time to find this bug and not even one of the answers on stack overflow mentioned it, that's why I posted it here.
{IMAGE} check the index and register functions and the error indicated below them.
you forgot to add render
after return
so you just need to add render
after return
The part you wrote(look at the last elif):
elif retailer_pk:
return (request, 'page-retailer-single.html', {
"products": products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"retailer": retailer,
})
but it would be:
elif retailer_pk:
return render(request, 'page-retailer-single.html', {
"products": products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"retailer": retailer,
})
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.