# Τεκμηρίωση του Django - 1.10.7

# Συχνές Ερωτήσεις: Χρησιμοποιώντας το Django

## Γιατί λαμβάνω σφάλμα σχετικά με το import του DJANGO_SETTINGS_MODULE;

Σιγουρευτείτε ότι:

- Η environment variable DJANGO_SETTINGS_MODULE είναι ρυθμισμένη ως ένα Python module (π.χ “mysite.settings”) και όχι ως π.χ “mysite/settings/”.

- Το παραπάνω module (π.χ “mysite.settings”) βρίσκεται μέσα στο `sys.path` (το `import mysite.settings` θα πρέπει να δουλεύει).

- Το module δεν περιέχει συντακτικά λάθη (βεβαίως).

## Δεν αντέχω τη γλώσσα των templates σας. Είμαι υποχρεωμένος να τη χρησιμοποιώ;

Τυγχάνει να πιστεύουμε ότι η μηχανή των templates μας είναι ότι καλύτερο συνέβη μετά το μπέϊκον αλλά αναγνωρίζουμε την δυνατότητα επιλογής ανάμεσα σε γλώσσες templates η οποία είναι καθαρά υποκειμενική. Το Django δεν απαιτεί να χρησιμοποιήσετε τη δική του template γλώσσα, οπότε αν θέλετε μπορείτε να χρησιμοποιήσετε τις Jinja2, Mako, ή οποιαδήποτε άλλη επιθυμείτε.

## Είναι υποχρεωτικό να χρησιμοποιώ το δικό σας επίπεδο μοντέλων/βάσεις δεδομένων;

Όχι. Όπως ακριβώς με το σύστημα των templates έτσι και το επίπεδο των μοντέλων/βάσεις δεδομένων είναι απόλυτα διαχωρισμένο από το υπόλοιπο framework.

Η μοναδική εξαίρεση είναι η εξής: Αν χρησιμοποιήσετε μια διαφορετική βιβλιοθήκη βάσης δεδομένων, δε θα έχετε στη διάθεση σας το αυτόματα-παραγόμενο Django admin site. Αυτή η εφαρμογή (admin site) είναι συνδεδεμένη με το επίπεδο της βάσης δεδομένων του Django.

## Πως χρησιμοποιώ τα πεδία ImageField και FileField;

Απαιτούνται μερικά βήματα για να επωφεληθείτε των πεδίων `FileField` ή/και `ImageField` που είναι δηλωμένα σε ένα μοντέλο:

1. Μέσα στο γενικό αρχείο ρυθμίσεων του project σας (settings file), θα χρειαστεί να ορίσετε το `MEDIA_ROOT` ως ένα μονοπάτι στο φάκελο που θα αποθηκεύονται τα αρχεία που ανεβαίνουν (uploaded). (Για λόγους καλύτερης απόδοσης, αυτά τα αρχεία δεν αποθηκεύονται στη βάση δεδομένων). Δηλώστε το `MEDIA_URL` ως το βασικό δημόσιο URL αυτού του φακέλου. Βεβαιωθείτε ότι αυτός ο φάκελος έχει δικαιώματα εγγραφής από το λογαριασμό χρήστη στο Web server. Αν δουλεύετε τοπικά στον υπολογιστή σας, τότε το πιο πιθανόν είναι να έχετε δικαιώματα εγγραφής στο φάκελο που ορίσατε.

2. Προσθέστε το πεδίο `FileField` ή/και το `ImageField` στο μοντέλο σας, προσδιορίζοντας το όρισμα `upload_to` προκειμένου να προσδιοριστεί ο υπο-φάκελος του `MEDIA_ROOT` που θα χρησιμοποιηθεί για τα ανεβασμένα αρχεία σας. Αν π.χ έχετε ορίσει την επιλογή `MEDIA_ROOT` ως “mysite/media_remote/” και το όρισμα `upload_to` ως “images/avatars/” τότε όλες οι εικόνες θα αποθηκευτούν στη τοποθεσία “mysite/media_remote/images/avatars/”.

3. Το μόνο που θα αποθηκευτεί στη βάση δεδομένων σας είναι το μονοπάτι στο αρχείο (σχετικό του `MEDIA_ROOT`). Το πιο πιθανό είναι να χρησιμοποιήσετε το βολικό attribute `url` που σας παρέχει το Django. Για παράδειγμα, αν το `ImageField` ονομάζεται `mug_shot`, μπορείτε να δείτε το απόλυτο μονοπάτι (absolute path) της εικόνας σας, στο template, ως `{{ object.mug_shot.url }}`.

## Πως μπορώ να κάνω μια μεταβλητή ορατή σε όλα τα templates;

Μερικές φορές τα templates σας χρειάζονται τα ίδια πράγματα. Ένα συνηθισμένο παράδειγμα είναι τα δυναμικά παραγόμενα μενού. Στην αρχή, μπορεί να φανεί λογικό να προσθέσετε ένα κοινό dictionary στο template context.

Η σωστή λύση είναι να χρησιμοποιήσετε ένα `RequestContext`. Λεπτομέρειες στο πως να το χρησιμοποιήσετε μπορείτε να βρείτε στην αναφορά Using RequestContext.