News

Aggiornamento del forum in corso, ne leggete qui: http://www.python-it.org/forum/index.php?topic=7051.0.

Topic: [RISOLTO] Django - URL dinamici  (Letto 312 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Frost

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
[RISOLTO] Django - URL dinamici
« il: Aprile 05, 2017, 21:20 »
Salve, avrei una quesione da porvi.
Sto facendo un piccolo progetto con Django, si tratta di una galleria di immagini, su cui voglio applicare diversi filtri.
Nello specifico voglio avere la possibilità di filtrare le immagini per nome, colore e  tipo, ma anche di usare insieme più filtri.

Ho una barra laterale su cui metto i parametri del filtro, ad Esempio:

Colore
  • Giallo
  • Verde
  • Blu

Tipo
  • Grande
  • Media
  • Piccola

ad ogni voce corrisponde un numero che uso per il filtro, ad esempio il giallo è l'1 il verde il 2 ecc....
Quando qualcuno clicca su giallo viene reindirizzato a /filter/?bycolor=1
Quando qualcuno clicca su Grande viene reindirizzato a /filter/?bytype=1

Il mio urls.py è fatto per gestire questo formato di url:
localhost:8000/gallery/filter/?byname=s
localhost:8000/gallery/filter/?byname=s&bycolor=n
localhost:8000/gallery/filter/?byname=s&bycolor=n&bytype=n

Dunque il mio problema è che se l'utente seleziona prima il colore e poi il tipo il tutto non funziona più.
C'è un modo carino per gestire queste cose?

A me piacerebbe generare l'url in un ordine definito.
Spero di aver spiegato decentemente la questione.
« Ultima modifica: Aprile 07, 2017, 16:19 da Frost »

Online RicPol

  • python sapiens sapiens
  • ******
  • Post: 2567
  • Punti reputazione: 9
    • Mostra profilo
Re:Django - URL dinamici
« Risposta #1 il: Aprile 06, 2017, 09:22 »
Eh capisco ma vedi bene che questo dipende da come è fatto il tuo menu laterale, cioè come fa l'utente a selezionare. Se sono solo dei link, allora c'è solo la possibilità di selezionare una cosa, ovviamente. Per selezionare due opzioni, allora dovresi avere per esempio due gruppi di radio options (una per il colore, una per la dimensione) e poi un pulsante ok sotto che invia la richiesta. Cioè, in pratica, quello è un form.
Con i form risolvi.

Offline Python

  • python sapiens sapiens
  • ******
  • Post: 2038
  • Punti reputazione: 2
  • Radon - Cyclomatic Complexity of you Python code
    • Mostra profilo
    • Radon - Cyclomatic Complexity of you Python code
Re:Django - URL dinamici
« Risposta #2 il: Aprile 06, 2017, 11:22 »
Non devi mettere i parametri in urls.py. L'unico url che deve essere presente è /gallery/filter/. Nella view poi accederai ai parametri tramite il dizionario request.GET (se il metodo è get).
« Ultima modifica: Aprile 06, 2017, 20:05 da Python »

Offline Frost

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Re:Django - URL dinamici
« Risposta #3 il: Aprile 06, 2017, 12:49 »
Eh capisco ma vedi bene che questo dipende da come è fatto il tuo menu laterale, cioè come fa l'utente a selezionare. Se sono solo dei link, allora c'è solo la possibilità di selezionare una cosa, ovviamente. Per selezionare due opzioni, allora dovresi avere per esempio due gruppi di radio options (una per il colore, una per la dimensione) e poi un pulsante ok sotto che invia la richiesta. Cioè, in pratica, quello è un form.
Con i form risolvi.

In effetti con i form risolvo, di questo me ne ero accorto, ho visto però che nel admin di Django, questa cosa viene gestita bene. A prescindere dall'ordine con cui l'utente clicca sui link, il link generato ha sempre la solita struttura.

Stabilito che l'url finale è /filter&type=n&color=n
Se l'utente sceglie prima il colore va in /filter&color=n, se dopo seleziona type viene comunque rimandato a /filter&type=n&color=n , mantenendo l'informazione della scelta precendente e l'ordine viene "ricalcolato".
Il form.

Però può darsi che non venga gestito tutto con Python. Mi preparo a usare il form.  ;)

Non devi mettere i parametri in urls.py. L'unico che deve essere presente è /gallery/filter/. Nella view poi accederai ai parametri tramite il dizionario request.GET (se il metodo è get).
Ricevuto, grazie.