Django通过查询字符串

时间:2017-08-18 08:15:24

标签: python django url views

我希望用户能够在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

1 个答案:

答案 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)