我希望用户能够在https://example.com/models?id=232
之类的网址中传递查询字符串。但查询字符串是可选的。所以https://example/models
也应该有效。我试着这个:
def myview(request, model):
context = {
'model': model,
}
if request.GET.get('id', None) != None and Model.objects.get(pk=request.GET.get('id', None)).exists():
id = request.GET.get('id', None)
context['id'] = id
return render(request, 'tests.html', context)
else:
return render(request, 'tests.html', context)
上面的代码中发生了什么:我想检查是否有查询字符串(模型ID)以及是否存在此模型。 Bu tmy代码不起作用。如果不满足这两个要求,则只需加载tests.html
而不加id
并且没有任何错误。我怎样才能做到这一点? id
也应该是数字
期待您的回答:D
答案 0 :(得分:0)
您将收到错误AttributeError: 'ModelName' object has no attribute 'exists'
,因为.exists()
函数适用于.filter(...)
方法。
def myview(request, model):
id = request.GET.get('id', None)
context = {'model': model, 'id': id}
if id is not None and id.isdigit():
if ModelName.objects.filter(pk=id).exists():
context['id'] = id
return render(request, 'tests.html', context)
另一种方式,您也可以使用ModelName.DoesNotExist
;
# ...
from django.http import Http404
def myview(request, model):
id = request.GET.get('id', None)
context = {'model': model, 'id': id}
if id is not None and id.isdigit():
try:
obj = ModelName.objects.get(pk=id)
context.update({'id': obj.id})
except ModelName.DoesNotExist:
raise Http404
return render(request, 'tests.html', context)