如何跳过django中的空get参数
我有类似www.example.com/search?param1=abc¶m2=xyz¶m3=的URL,目前我在视图中所做的是这样的如何跳过django中的空get参数,django,Django,我有类似www.example.com/search?param1=abc¶m2=xyz¶m3=的URL,目前我在视图中所做的是这样的 if ((request.GET.get('param1')) or (request.GET.get('param2')) or (request.GET.get('param3'))): if request.GET.get('param1'): value1 = request.GET.get('param1')
if ((request.GET.get('param1')) or (request.GET.get('param2')) or (request.GET.get('param3'))):
if request.GET.get('param1'):
value1 = request.GET.get('param1')
if request.GET.get('title'):
value2 = request.GET.get('param2')
if request.GET.get('location'):
value3 = request.GET.get('param3')
api_url = `www.api-end-point.com?p1=value1&p2=value2&p3=value3&format=json`
但你们可以看到param3是空的,要点击api,我需要跳过空参数
因此,我的问题是如何从django中的get
请求中的url获取所有设置参数。您可以尝试:
value1=request.GET.GET('param1')如果request.GET.GET('param1')否则无
尝试以下操作:
# values = [request.GET.get(p) for p in ['param1', 'param2', 'param3']]
values = ['val1', 'val2', '']
names = ['p1', 'p2', 'p3']
query = 'www.api-end-point.com?'
for i, value in enumerate([v for v in values if v]):
query += "{}{}={}".format("&" if i else "", names[i], value)
query += '&format=json'
这将产生:
www.api-end-point.com?p1=val1&p2=val2&format=json
好吧,这让我发疯了,如果你想要一个真正肮脏但有效的解决方案,请检查代码:
def index2 (request):
if ....:
try:
value1,value2,value3 = request.GET.get('param1'),request.GET.get('param2'),request.GET.get('param3')
except:
value1,value2,value3 = None, None, None
if value3:
api_url = "www.api-end-point.com?p1="+str(value1)+"&p2="+str(value2)+"&p3="+str(value3)+"&format=json"
elif value2:
api_url = "www.api-end-point.com?p1="+str(value1)+"&p2="+str(value2)+"&format=json"
elif value1:
api_url = "www.api-end-point.com?p1="+str(value1)+"&format=json"
else:
api_url = "Whatever/redirect"
return render(request,'someThing/index.html',{"api_url":api_url})
不建议用于生产,因为它根本不干净。另一个人发布的for循环的解决方案更干净!但是这个正在运行
这是一个快速而肮脏的解决方案,但这是有效的。我试过了。如果您有问题,请留下评论:)如果没有传递任何信息,您是否尝试过使用默认参数?@Gahan我不明白您的意思,实际上这是我的第一个项目,我还没有听说过默认参数。如果request.get.get('param1'):value1=request.get.get('param1'),您不认为这几乎是相同的
If request.get.get('param1'):value1=request.get.get('param1)else value1=None
no,它总是在您的案例中创建变量而不是定义变量。这并不能解决不均匀&
s和冗余p1=
s的问题。@parvez我进行了编辑。请告诉我这是否有效。我只是有点生气,因为它没有像我预期的那样运行。它可以工作,但你不认为这是解决此类问题的非常幼稚的解决方案吗?我正在寻找其他替代方案是的,我认为,这就是为什么我写了三次它不好。但我很高兴我能让它工作,我变得疯狂,然后我写了越来越多的行,只是为了使“东西”。。。。如果您将我的解决方案与其他解决方案中的一个结合起来,最终可能会得到一个合适的解决方案;)感谢您的帮助请不要发布您自己知道的肮脏答案,人们会在stackoverflow上复制答案,发布错误/低于最佳的代码通常是不好的做法。欢迎来到SO!
params = {k: request.GET[k] for k in request.GET if request.GET[k]}