是否有机会指定 url 查询中需要哪些参数并自动将它们传递到 View 函数中?
在 urls.py 中我想要这样的东西:
path('get_part_info?<part>', views.get_part_info, name='get_part_info'),
在views.py中有这样的东西:
def get_part_info(request, part):
# do something with part
return JsonResponse({'result': part})
想法是避免丑陋的构造,例如:part= request.GET.get('part')
URL 路径不是解决方案,因为“部分”值可能包含各种额外字符,例如斜杠等。
最佳答案
你可以编写一个装饰器:
from functools import wraps
from django.http import HttpResponseBadRequest, JsonResponse
def query_params(*param_names):
def decorator(func):
@wraps(func)
def inner(request, *args, **kwargs):
try:
params = {name: request.GET[name] for name in param_names}
except KeyError:
return HttpResponseBadRequest("Missing Parameter")
kwargs.update(params)
return func(request, *args, **kwargs)
return inner
return decorator
@query_params("part")
def get_part_info(request, part):
# do something with part
return JsonResponse({"result": part})
如果缺少参数,此装饰器将返回 400,但可以按您想要的方式进行更改,例如重定向到另一个 URL 或使用默认值。
关于python - Django 在 url 查询中需要参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59287690/