Συχνές Ερωτήσεις: Χρησιμοποιώντας το 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 που είναι δηλωμένα σε ένα μοντέλο:
- Μέσα στο γενικό αρχείο ρυθμίσεων του project σας (settings file), θα χρειαστεί να ορίσετε το
MEDIA_ROOTως ένα μονοπάτι στο φάκελο που θα αποθηκεύονται τα αρχεία που ανεβαίνουν (uploaded). (Για λόγους καλύτερης απόδοσης, αυτά τα αρχεία δεν αποθηκεύονται στη βάση δεδομένων). Δηλώστε τοMEDIA_URLως το βασικό δημόσιο URL αυτού του φακέλου. Βεβαιωθείτε ότι αυτός ο φάκελος έχει δικαιώματα εγγραφής από το λογαριασμό χρήστη στο Web server. Αν δουλεύετε τοπικά στον υπολογιστή σας, τότε το πιο πιθανόν είναι να έχετε δικαιώματα εγγραφής στο φάκελο που ορίσατε. - Προσθέστε το πεδίο
FileFieldή/και τοImageFieldστο μοντέλο σας, προσδιορίζοντας το όρισμαupload_toπροκειμένου να προσδιοριστεί ο υπο-φάκελος τουMEDIA_ROOTπου θα χρησιμοποιηθεί για τα ανεβασμένα αρχεία σας. Αν π.χ έχετε ορίσει την επιλογήMEDIA_ROOTως «mysite/media_remote/» και το όρισμαupload_toως «images/avatars/» τότε όλες οι εικόνες θα αποθηκευτούν στη τοποθεσία «mysite/media_remote/images/avatars/». - Το μόνο που θα αποθηκευτεί στη βάση δεδομένων σας είναι το μονοπάτι στο αρχείο (σχετικό του
MEDIA_ROOT). Το πιο πιθανό είναι να χρησιμοποιήσετε το βολικό attributeurlπου σας παρέχει το Django. Για παράδειγμα, αν τοImageFieldονομάζεταιmug_shot, μπορείτε να δείτε το απόλυτο μονοπάτι (absolute path) της εικόνας σας, στο template, ως{{ object.mug_shot.url }}.
Πως μπορώ να κάνω μια μεταβλητή ορατή σε όλα τα templates;¶
Sometimes your templates all need the same thing. A common example would be dynamically generated menus. At first glance, it seems logical to add a common dictionary to the template context.
The best way to do this in Django is to use a RequestContext. Details on
how to do this are here: Using RequestContext.