![](/img/trans.png)
[英]AttributeError: 'tuple' object has no attribute 'get'
[英]AttributeError 'tuple' object has no attribute 'get'
我有一個 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"]
})
你在這里返回一個元組:
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,
})
在views.py 中的return
函數末尾有一個額外的逗號“,”
return render(request, 'index.html',{}), #incorrect
return render(request, 'index.html',{}) #correct
甚至采用逗號的意見也是一個簡單的解決方案
就像這樣
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())
始終確保在“返回”之后在視圖函數中進行渲染
就我而言,我沒有添加
return render(request, app_name/index.html
我花了很多時間才找到這個錯誤,甚至堆棧溢出的答案之一都沒有提到它,這就是我在這里發布它的原因。
你忘記在return
后添加render
所以你只需要在return
后添加render
你寫的部分(看最后一個elif):
elif retailer_pk:
return (request, 'page-retailer-single.html', {
"products": products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"retailer": retailer,
})
但它會是:
elif retailer_pk:
return render(request, 'page-retailer-single.html', {
"products": products,
"sorting": filt["sorting"],
"filtering": filt["filtering"],
"retailer": retailer,
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.