Argumentos na URL

19 views
Skip to first unread message

Italo Maia

unread,
Nov 9, 2009, 3:14:37 PM11/9/09
to web2py-users-brazil
Como eu passo/pego argumentos numa url?
No Django, eu iria configurar o urls.py com um (?P<campo><re_exp>) e
obteria o valor de campo nos argumentos do método. Em web2py, como eu
faria isso?

moriarty

unread,
Nov 11, 2009, 11:08:01 AM11/11/09
to web2py-users-brazil
Os argumentos ficam em request.args

é sempre bom testar se os argumentos estão lá antes para evitar um
erro do tipo "index out of range"

algo como:
x = request.args[0] if len(request.args) > 0 else None
y = request.args[1] if len(request.args) > 1 else None

ou colocar um if antes:

if len(request.args) > 1:
x, y = request.args[0], request.args[1]

dependendo do caso um se adapta melhor que o outro.

Álvaro Justen [Turicas]

unread,
Nov 11, 2009, 7:49:44 PM11/11/09
to web2py-us...@googlegroups.com
2009/11/11 moriarty <moriarty...@gmail.com>:
>
> Os argumentos ficam em request.args
>
> é sempre bom testar se os argumentos estão lá antes para evitar um
> erro do tipo "index out of range"
>
> algo como:
> x = request.args[0] if len(request.args) > 0 else None
> y = request.args[1] if len(request.args) > 1 else None
>
> ou colocar um if antes:
>
> if len(request.args) > 1:
>   x, y = request.args[0], request.args[1]

Na verdade, existe o request.args(N), que retorna None caso o N-ésimo
índice não exista (ou o valor do N-ésimo argumento, caso exista).
Tem também o request.vars, que é a junção do request.get_vars e
request.post_vars (são as variáveis query string GET e POST,
respectivamente).
Com relação aos argumentos, ficam assim:
http://seu_dominio.tld/aplicacao/controller/action/argumento1/argumento2?var1=valor1&var2=valor2

Nesse caso:
request.args[0] = request.args(0) = 'argumento1'
request.args[1] = request.args(1) = 'argumento2'
request.args[2] = exceção IndexError, request.args(2) = None
request.vars['var1'] = request.get_vars['var1'] = 'valor1'
request.vars['var2'] = request.get_vars['var2'] = 'valor2'
request.vars['qualquer_outra_var_nao_passada'] =
request.get_vars['qualquer_outra_var_nao_passada'] = exceção KeyError

Nota: chamar como função vale somente para request.args e não para os demais.

> dependendo do caso um se adapta melhor que o outro.
>
> On 9 nov, 18:14, Italo Maia <italo.m...@gmail.com> wrote:
>> Como eu passo/pego argumentos numa url?
>> No Django, eu iria configurar o urls.py com um (?P<campo><re_exp>) e
>> obteria o valor de campo nos argumentos do método. Em web2py, como eu
>> faria isso?
> >
>



--
Álvaro Justen
Diretor de Desenvolvimento
Peta5 - Nós fazemos TV digital
http://www.peta5.com.br/
21. 3021-6001 / 9898-0141

Álvaro Justen [Turicas]

unread,
Nov 11, 2009, 7:50:31 PM11/11/09
to web2py-us...@googlegroups.com
Ah, acabei esquecendo de mencionar: você pode "rotear" as URLs também
através do arquivo routes.py, porém, pela pergunta, acredito que o que
precise mesmo são os request.args e request.get_vars.

2009/11/11 Álvaro Justen [Turicas] <alvaro...@gmail.com>:

moriarty

unread,
Nov 12, 2009, 11:11:57 AM11/12/09
to web2py-users-brazil
Na verdade, existe o request.args(N), que retorna None caso o N-ésimo
índice não exista (ou o valor do N-ésimo argumento, caso exista).

Legal, estava fazendo o mais difícil.

On 11 nov, 22:50, Álvaro Justen [Turicas] <alvarojus...@gmail.com>
wrote:
> Ah, acabei esquecendo de mencionar: você pode "rotear" as URLs também
> através do arquivo routes.py, porém, pela pergunta, acredito que o que
> precise mesmo são os request.args e request.get_vars.
>
> 2009/11/11 Álvaro Justen [Turicas] <alvarojus...@gmail.com>:
>
>
>
> > 2009/11/11 moriarty <moriarty.pinhe...@gmail.com>:
>
> >> Os argumentos ficam em request.args
>
> >> é sempre bom testar se os argumentos estão lá antes para evitar um
> >> erro do tipo "index out of range"
>
> >> algo como:
> >> x = request.args[0] if len(request.args) > 0 else None
> >> y = request.args[1] if len(request.args) > 1 else None
>
> >> ou colocar um if antes:
>
> >> if len(request.args) > 1:
> >>   x, y = request.args[0], request.args[1]
>
> > Na verdade, existe o request.args(N), que retorna None caso o N-ésimo
> > índice não exista (ou o valor do N-ésimo argumento, caso exista).
> > Tem também o request.vars, que é a junção do request.get_vars e
> > request.post_vars (são as variáveis query string GET e POST,
> > respectivamente).
> > Com relação aos argumentos, ficam assim:
> >http://seu_dominio.tld/aplicacao/controller/action/argumento1/argumen...
Reply all
Reply to author
Forward
0 new messages