Skip to content

bug: get querystring doesnt work #5898

@SORRENTOS

Description

@SORRENTOS

Duplicate Check

Describe the bug

Hi.
English is not my primary lenguage so sorry for that
I am develpoing a web app with flet and I am trying to get arguments from the url. In the official doc say this:

Image Also i found this in "querystring.py", inside of "flet/core/.
class QueryString(UrlComponents):
    
    Note:
        `QueryString` class is meant to be for internal use inside of page. Hence, methods such as `get()` or `to_dict()` must be\n
        called from `page` object\n

    Constructor:
            `page` takes `Page` class an an argument and extracts URL automatically\n

    Methods:
            Public:
                `get()` method takes `key` an an argument and returns value according to key. (Ex: .../?name=Joe -> `get('name')` -> `Joe`)\n
                `to_dict` returns all the key-value pairs of querystring as a `dict`\n
                `path` returns url path (Ex: .../products?id=1 -> /products)

            Private(meant to be used only inside of page class):
                `post()` method takes key-value pair as an argument and returs proceeded querystring ready to be merged with URL



I used as indicated but I got this error using http://127.0.0.1:52981/?name=Joe:

Image
  File "C:\Users\benja\OneDrive\Desktop\musica\ia_fader\src\main.py", line 7, in main
    token = page.query.get("name")
  File "C:\Users\benja\OneDrive\Desktop\musica\ia_fader\.venv\Lib\site-packages\flet\core\querystring.py", line 73, in get
    return self._data[key]
           ~~~~~~~~~~^^^^^
KeyError: 'name'

I also try using page.query.to_dict() but returns an empty dict.
here is my code, some variables are in spanish but nothing important. (also, I dont know if it is important but is an ia chat)

Code sample

Code
#from API_ia import ia, generar_imagen
import asyncio
ia_ocupada = False
def main(page: ft.Page):
    chat = ft.Column(expand=True,scroll= ft.ScrollMode.AUTO)
    token = page.query.get("name")
    print(token)
        
    async def send_click(e):
        global ia_ocupada 
        if(ia_ocupada == False): 
            valor = new_message.value #guardo valor usuario
            mensaje_usuario = ft.Container(content=ft.Text(valor),animate_scale=ft.Animation(300, ft.AnimationCurve.BOUNCE_OUT),margin= ft.margin.all(10),padding = ft.padding.all(10),bgcolor="#240046",border_radius=10,expand=False,scale=0.01)
            chat.controls.append(
                ft.Row([mensaje_usuario],alignment=ft.MainAxisAlignment.END))
                
            chat.update()
            await asyncio.sleep(0.1) #Espera para renderizar el mensaje primero
            mensaje_usuario.scale = 1
            mensaje_usuario.update()
            ia_ocupada = True
            valor = "Pensando..."
    
            pensar_ia =ft.Container(content=ft.Text(valor),margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#240046",border_radius=10)
            chat.controls.append(pensar_ia)
            page.update() #Muestra pensando
            await asyncio.sleep(0.1)
            valor = new_message.value #guardo valor usuario
            new_message.value = "" #limpio textfield
            respuesta = ia(valor) # pregunta a la api
            new_message.value = ""
            chat.controls.remove(pensar_ia)
            page.update()

            chat.controls.append(ft.Container(content=ft.Markdown(
                respuesta,
                selectable=True,
                extension_set=ft.MarkdownExtensionSet.GITHUB_WEB,
            
            ),margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#3c096c",border_radius=10))
            page.update()
            ia_ocupada = False
    def gen_imagen(e):
        global ia_ocupada 

        if(ia_ocupada == False):
            ia_ocupada = True
            valor = new_message.value
            #request  usuario
            chat.controls.append(ft.Container(content=ft.Text(valor),margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#240046",border_radius=10))
            new_message.value = ""
            page.update()
            pensar_ia =ft.Container(content=ft.Text("Generando imagen, porfavor espere..."),margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#240046",border_radius=10)
            chat.controls.append(pensar_ia)
            page.update() #Muestra pensando
            chat.controls.remove(pensar_ia)
            respuesta = generar_imagen(valor)
            chat.controls.append(ft.Container(content=respuesta,margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#3c096c",border_radius=10))
            page.update()
            ia_ocupada = False
    new_message = ft.TextField(expand= True,bgcolor="#636e72",on_submit= send_click)

    page.add(
        chat, ft.Row(controls=[new_message, 
                               ft.IconButton(icon=ft.Icons.SEND_ROUNDED, on_click=send_click),
                               ft.IconButton(icon=ft.Icons.IMAGE_ROUNDED, on_click=gen_imagen)])
    )

ft.app(target=main, view=ft.AppView.WEB_BROWSER, assets_dir="assets")

To reproduce

  1. jus run flet (I am trying flet run --web btw)

Expected behavior

when the url has a string like /?name="joe", you should see it in the terminal

Screenshots / Videos

Captures

import flet as ft
from API_ia import ia, generar_imagen
import asyncio
ia_ocupada = False
def main(page: ft.Page):
    chat = ft.Column(expand=True,scroll= ft.ScrollMode.AUTO)
    token = page.query.get("name")
    print(token)
        
    async def send_click(e):
        global ia_ocupada 
        if(ia_ocupada == False): 
            valor = new_message.value #guardo valor usuario
            mensaje_usuario = ft.Container(content=ft.Text(valor),animate_scale=ft.Animation(300, ft.AnimationCurve.BOUNCE_OUT),margin= ft.margin.all(10),padding = ft.padding.all(10),bgcolor="#240046",border_radius=10,expand=False,scale=0.01)
            chat.controls.append(
                ft.Row([mensaje_usuario],alignment=ft.MainAxisAlignment.END))
                
            chat.update()
            await asyncio.sleep(0.1) #Espera para renderizar el mensaje primero
            mensaje_usuario.scale = 1
            mensaje_usuario.update()
            ia_ocupada = True
            valor = "Pensando..."
    
            pensar_ia =ft.Container(content=ft.Text(valor),margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#240046",border_radius=10)
            chat.controls.append(pensar_ia)
            page.update() #Muestra pensando
            await asyncio.sleep(0.1)
            valor = new_message.value #guardo valor usuario
            new_message.value = "" #limpio textfield
            respuesta = ia(valor) # pregunta a la api
            new_message.value = ""
            chat.controls.remove(pensar_ia)
            page.update()

            chat.controls.append(ft.Container(content=ft.Markdown(
                respuesta,
                selectable=True,
                extension_set=ft.MarkdownExtensionSet.GITHUB_WEB,
            
            ),margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#3c096c",border_radius=10))
            page.update()
            ia_ocupada = False
    def gen_imagen(e):
        global ia_ocupada 

        if(ia_ocupada == False):
            ia_ocupada = True
            valor = new_message.value
            #request  usuario
            chat.controls.append(ft.Container(content=ft.Text(valor),margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#240046",border_radius=10))
            new_message.value = ""
            page.update()
            pensar_ia =ft.Container(content=ft.Text("Generando imagen, porfavor espere..."),margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#240046",border_radius=10)
            chat.controls.append(pensar_ia)
            page.update() #Muestra pensando
            chat.controls.remove(pensar_ia)
            respuesta = generar_imagen(valor)
            chat.controls.append(ft.Container(content=respuesta,margin= ft.margin.all(10),padding = ft.padding.all(15),bgcolor="#3c096c",border_radius=10))
            page.update()
            ia_ocupada = False
    new_message = ft.TextField(expand= True,bgcolor="#636e72",on_submit= send_click)

    page.add(
        chat, ft.Row(controls=[new_message, 
                               ft.IconButton(icon=ft.Icons.SEND_ROUNDED, on_click=send_click),
                               ft.IconButton(icon=ft.Icons.IMAGE_ROUNDED, on_click=gen_imagen)])
    )

ft.app(target=main, view=ft.AppView.WEB_BROWSER, assets_dir="assets")


Operating System

Windows

Operating system details

win 10

Flet version

0.28.3

Regression

No, it isn't

Suggestions

No response

Logs

Logs
[Paste your logs here]

Additional details

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions