Domanda Python Django

Matteo2297

Utente Iron
4 Marzo 2021
6
2
1
10
Ciao a tutti! E' il primo Post che faccio e non so se mi trovo nella categoria giusta.

Vorrei mostravi il problema che sto avendo in questi ultimi giorni sperando che qualcuno mi possa aiutare perchè non so come fare.

Sto cercando di studiare come creare una single page application e sono arrivato all'installazione di webpack all'interno del mio ambiente virtuale e nella configurazione di webpack-stats-json.
Dopo vari passaggi mi viene chiesto di aggiungere al file settings.py:

STATICFILES_DIRS = [
[BASE_DIR / "assets"],
[BASE_DIR / "frontend/dist"],
]


Infine provo a dare il comando py manage.py runserver per vedere i risultati e mi appare questo errore relativo a un file di python:

finders.py", line 59, in __init__

prefix, root = root
ValueError: not enough values to unpack (expected 2, got 1)


Penso che il problema sia nella staticfile_dirs che ho creato nel file settings.py del mio progetto perchè nel file finders.py c'è una classe FileSystemFinder che penso si occupi dei file statici usati nella staticfile_dirs. Nonostante ciò non so come risolverlo.

Come si risolve ?
Vi ringrazio per la lettura e spero che mi possiate aiutare
 
Potresti postare finders.py? Cosi mi rendo conto dove lancia quel ValueError e capire se sia staticfile_dirs il problema. Scusa se rispondo solo ora, l'ho notato solo ora il messaggio!
 
Ciao, Figurati sono felicissimo che qualcuno mi abbia risposto! Ti allego subito la foto. Il ValueError è alla riga 59!


class Finder.png
 
Ok, i ValueError sono generalmente degli errori logici non legati al tipo di valore che gli passi. Nel tuo caso è come se non gli stia passando una path adeguata (nel formato) anche se rimane pur sempre una stringa. Quindi secondo me hai fatto qualche errore dentro

STATICFILES_DIRS = [
[BASE_DIR / "assets"],
[BASE_DIR / "frontend/dist"],
]

Non so che sistema usi, ma hai controllato se il formato delle path in Python combaci con quelle del tuo sistema? In quel caso non so se sia generico oppure usi formati come PureWindowsPath (Per capirci con \\ al posto di /)
 
Non so come rispondere alla tua domanda ma penso tu ti riferisca a questo ?

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

(ho fatto copia incolla dal file settings.py)
 
Non so come rispondere alla tua domanda ma penso tu ti riferisca a questo ?

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

(ho fatto copia incolla dal file settings.py)

Uhm ok, non è quello il problema... non so dirti allora :S, però conta che ValueError è un problema di assegnamento in cui i valori sono in un giusto formato ma semanticamente sono sbagliati (ossia li usi in maniera impropria)
 
Presumo sia
Python:
STATICFILES_DIRS = [
    [BASE_DIR, "assets"],
    [BASE_DIR, "frontend/dist"],
]
visto che sta fallendo l'unpacking.
 
Ciao St3ve, provando con le virgole e avviando il server mi appare questo:

File "C:\Users\Utente\Desktop\FINAL_PROJECT1\venv\lib\site-packages\django\contrib\staticfiles\finders.py", line 81, in check
if prefix.endswith('/'):
AttributeError: 'WindowsPath' object has no attribute 'endswith'

def check.png
 
Prova con
Python:
BASE_DIR = str(Path(__file__).resolve().parent.parent)
e se ti escono altri errori, fallo soltanto in STATICFILES_DIRS
Python:
STATICFILES_DIRS = [
    [str(BASE_DIR), "assets"],
    [str(BASE_DIR), "frontend/dist"],
]

Mi sa che hai fatto un po' di copy&paste eh... :asd:
 
  • Love
Reazioni: Matteo2297
Lavorando su Atom e utilizzando Python, file di questo genere non li avevo mai visti prima forse perchè erano già stati inseriti senza che io facessi niente...
Ha funzionato! e ti ringrazio davvero tanto @St3ve . Posso continuare a studiare adesso. :D
Messaggio unito automaticamente:

@St3ve Scusami il disturbo ti vorrei chiedere anche come hai fatto a risolvere il problema se magari me lo potessi spiegare o inviarmi un link dove c'è tipo un tutorial in modo tale che possa capire a pieno...
 
Nelle righe di codice da 57 a 63 sta analizzando STATICFILES_DIRS. Nel for scorre gli elementi della lista e per ognuno di esso controlla se è una lista/tupla (if) oppure no (else). Se non è una lista assegna la stringa vuota a prefix, ma nel tuo caso è una lista quindi avviene l'unpacking prefix, root = root: da questo ho capito che ogni elemento di STATICFILES_DIR dev'essere una lista (o una tupla) con esattamente due elementi (oppure una singola stringa, ed entri nell'else), te lo diceva anche l'errore ValueError: not enough values to unpack (expected 2, got 1).

Dopo mi hai segnalato che l'errore era AttributeError: 'WindowsPath' object has no attribute 'endswith'. Quindi chiaramente si aspettava una stringa (perché edswith funziona sulle stringhe) e tu gli hai dato un WindowsPath. A questo punto ti ho suggerito di aggiungere un cast con str.

Comunque, non è in questo modo che si procede. Nella documentazione ci sarà sicuramente descritto come devi scrivere impostare il tutto... il problema è che non ho capito che librerie stai usando.

EDIT:
File "C:\Users\Utente\Desktop\FINAL_PROJECT1\venv\lib\site-packages\django\contrib\staticfiles\finders.py", line 81, in check
Ah, è Django. https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-STATICFILES_DIRS
 
  • Mi piace
Reazioni: GrincH--