我有一个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"]
})
答案 0 :(得分:40)
你在这里返回一个元组:
elif retailer_pk:
return (request, 'page-retailer-single.html', {
"products": products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"retailer": retailer,
})
您是否忘记在那里添加render
:
elif retailer_pk:
return render(request, 'page-retailer-single.html', {
"products": products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"retailer": retailer,
})
答案 1 :(得分:3)
views.py
中return
函数的末尾有一个逗号“,”
return render(request, 'index.html',{}), #incorrect
return render(request, 'index.html',{}) #correct
答案 2 :(得分:1)
即使采用逗号作为解决方案也很简单
原样
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())
而不是 这个
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())
答案 3 :(得分:1)
始终确保在“返回”之后在视图函数中渲染
<块引用>就我而言,我没有添加 return render(request, app_name/index.html
我花了很多时间才找到这个错误,甚至堆栈溢出的一个答案都没有提到它,这就是我把它贴在这里的原因。
{IMAGE} check the index and register functions and the error indicated below them.