我有一个 Django 应用程序。但是我不能犯一个我已经苦苦挣扎了一段时间的错误。
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
这是 django 提供给我的回溯。
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:
我很难弄清楚为什么会出现此错误。我怎样才能找到 tuple
在我的代码中的位置?
风景:
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"]
})
原文由 nikora 发布,翻译遵循 CC BY-SA 4.0 许可协议
你在这里返回一个元组:
您是否忘记添加
render
也许: