flet icon indicating copy to clipboard operation
flet copied to clipboard

bug: get querystring doesnt work

Open SORRENTOS opened this issue 1 month ago • 0 comments

Duplicate Check

  • [x] I have searched the opened issues and there are no duplicates

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

SORRENTOS avatar Dec 12 '25 15:12 SORRENTOS