Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何跳过django中的空get参数_Django - Fatal编程技术网

如何跳过django中的空get参数

如何跳过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')

我有类似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('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]}