{"title":"Διαχειρίζοντας τα static files (πχ εικόνες, JavaScript, CSS)","version":"1.10","locale":"el","docname":"howto/static-files/index","url":"/el/1.10/howto/static-files/","canonical":"https://djangodocs.dev/el/1.10/howto/static-files/","summary":"Οι ιστοσελίδες, γενικά, χρειάζονται να εξυπηρετούν και επιπρόσθετα αρχεία πέρα από την ίδια την HTML, όπως εικόνες, JavaScript, CSS, γραμματοσειρές κλπ. Στο Django,…","html":"<h1>Διαχειρίζοντας τα static files (πχ εικόνες, JavaScript, CSS)<a class=\"heading-anchor\" href=\"#managing-static-files-e-g-images-javascript-css\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Οι ιστοσελίδες, γενικά, χρειάζονται να εξυπηρετούν και επιπρόσθετα αρχεία πέρα από την ίδια την HTML, όπως εικόνες, JavaScript, CSS, γραμματοσειρές κλπ. Στο Django, αναφερόμαστε σε αυτού του είδους τα αρχεία ως «στατικά αρχεία» (static files). Το Django παρέχει το module <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code></a> για να σας βοηθήσει να τα διαχειρίζεστε.</p>\n<p>Η σελίδα αυτή περιγράφει πως μπορείτε να εξυπηρετήσετε τέτοιου είδους αρχεία, static files.</p>\n<section id=\"configuring-static-files\">\n<h2>Ρυθμίζοντας τα static files<a class=\"heading-anchor\" href=\"#configuring-static-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ol class=\"arabic\">\n<li><p>Βεβαιωθείτε ότι η εφαρμογή <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code> συμπεριλαμβάνεται στη ρύθμιση <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>.</p></li>\n<li><p>Στο γενικό αρχείο ρυθμίσεων σας, settings file, δώστε μια τιμή, string, στη μεταβλητή :STATIC_URL. Για παράδειγμα:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">STATIC_URL</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;/static/&#39;</span>\n</code></pre></div>\n</li>\n<li><p>Στα templates σας, είτε εισάγετε με το χέρι το url για μια εικόνα, πχ κάπως έτσι <code class=\"docutils literal notranslate\"><span class=\"pre\">/static/my_app/myexample.jpg</span></code> ή, προτιμότερο, χρησιμοποιήστε το template tag <a class=\"reference internal\" href=\"/el/1.10/ref/templates/builtins/#std-templatetag-static\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">static</span></code></a> για να χτίσετε το URL ενός δοσμένου relative path χρησιμοποιώντας την, ήδη παραμετροποιημένη ρύθμιση <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATICFILES_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_STORAGE</span></code></a> (η χρήση του <a class=\"reference internal\" href=\"/el/1.10/ref/templates/builtins/#std-templatetag-static\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">static</span></code></a> κάνει ακόμα πιο εύκολη, μελλοντικά, την μετάβαση σε ένα content delivery network (CDN) για την εξυπηρέτηση των static files).</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">static</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">img</span> <span class=\"na\">src</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">static</span> <span class=\"s2\">&quot;my_app/example.jpg&quot;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span> <span class=\"na\">alt</span><span class=\"o\">=</span><span class=\"s\">&quot;My image&quot;</span><span class=\"p\">/&gt;</span>\n</code></pre></div>\n</li>\n<li><p>Αποθηκεύστε τα static files σας σε έναν φάκελο που ονομάζεται <code class=\"docutils literal notranslate\"><span class=\"pre\">static</span></code> μέσα στην εκάστοτε εφαρμογή σας. Για παράδειγμα <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app/static/my_app/myimage.jpg</span></code>.</p></li>\n</ol>\n<aside class=\"admonition-serving-the-files admonition\">\n<p class=\"admonition-title\">Εξυπηρετώντας τα αχεία</p>\n<p>Πέρα από τις ανωτέρω ρυθμίσεις, θα χρειαστεί, επίσης, να εξυπηρετήσετε αυτά τα static files.</p>\n<p>Κατά τη διάρκεια του development, αν χρησιμοποιείτε την εφαρμογή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code></a>, η εξυπηρέτηση των static files θα γίνει αυτόματα από το <a class=\"reference internal\" href=\"/el/1.10/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> όταν, φυσικά, το <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> είναι <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> (δείτε τη συνάρτηση <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve\" title=\"django.contrib.staticfiles.views.serve\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles.views.serve()</span></code></a>).</p>\n<p>Αυτή η μέθοδος είναι <strong>εντελώς αναποτελεσματική</strong> και πιθανόν <strong>μη ασφαλής</strong>, κάτι που την καθιστά <strong>ακατάλληλη για την παραγωγή</strong>.</p>\n<p>Δείτε στο άρθρο <a class=\"reference internal\" href=\"/el/1.10/howto/static-files/deployment/\"><span class=\"doc\">ανεβάζοντας τα static files</span></a> για τις σωστές στρατηγικές εξυπηρέτησης των static files σε παραγωγικά περιβάλλοντα.</p>\n</aside>\n<p>Το project σας θα έχει, πιθανόν και κάποια static files τα οποία δεν θα συνδέονται με κάποια συγκεκριμένη εφαρμογή. Αν θέλετε να εξυπηρετήσετε στατικά αρχεία τα οποία θα είναι καθολικά για όλο το project σας, εκτός της δημιουργίας του φακέλου <code class=\"docutils literal notranslate\"><span class=\"pre\">static/</span></code> μέσα σε κάθε εφαρμογή σας, μπορείτε να ορίσετε μια λίστα από φακέλους (<a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATICFILES_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_DIRS</span></code></a>) μέσα στο γενικό αρχείο ρυθμίσεων σας, settings file, όπου το Django θα κοιτάξει, επίσης, για επιπρόσθετα static files. Για παράδειγμα:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">STATICFILES_DIRS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">BASE_DIR</span><span class=\"p\">,</span> <span class=\"s2\">&quot;static&quot;</span><span class=\"p\">),</span>\n    <span class=\"s1\">&#39;/var/www/static/&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Δείτε το εγχειρίδιο για τη ρύθμιση <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATICFILES_FINDERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_FINDERS</span></code></a> για περισσότερες πληροφορίες σχετικά με το πως η εφαρμογή <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> βρίσκει τα αρχεία σας.</p>\n<aside class=\"admonition-static-file-namespacing admonition\">\n<p class=\"admonition-title\">Static file namespacing</p>\n<p>Τώρα, <em>ίσως</em> θα μπορούσαμε να βάλουμε τα static files απ” ευθείας στο φάκελο <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app/static/</span></code> (παρά να δημιουργήσουμε άλλον έναν υποφάκελο <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code>), αλλά δεν θα ήταν καλή ιδέα. Το Django θα επιλέξει το πρώτο static file που θα βρει το οποίο θα ταιριάξει στο όνομα που ψάχνει. Αν έχετε, λοιπόν, ένα static file με το ίδιο όνομα σε μια <em>άλλη</em> εφαρμογή, τότε το Django δεν θα μπορέσει να διαχωρίσει ποια από τα δύο να χρησιμοποιήσει. Χρειαζόμαστε ένα τρόπο να καθοδηγήσουμε το Django στο σωστό αρχείο. Ο ευκολότερος τρόπος να το κάνουμε είναι να εφαρμόσουμε την τεχνική του <em>namespacing</em> στα static files. Δηλαδή, να τοποθετούμε αυτά τα static files μέσα σε <em>άλλον έναν</em> φάκελο με το ίδιο όνομα με αυτό της εφαρμογής.</p>\n</aside>\n</section>\n<section id=\"serving-static-files-during-development\">\n<span id=\"serving-static-files-in-development\"></span><h2>Εξυπηρετώντας τα static files κατά τη διάρκεια του development<a class=\"heading-anchor\" href=\"#serving-static-files-during-development\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Αν χρησιμοποιείτε την εφαρμογή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code></a> όπως περιγράφηκε παραπάνω, ο <a class=\"reference internal\" href=\"/el/1.10/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> θα εξυπηρετήσει τα static files αυτόματα αν το <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> είναι <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. Αν δεν έχετε την εφαρμογή <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code> μέσα στη ρύθμιση <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, μπορείτε ακόμη να τα εξυπηρετήσετε, χειροκίνητα, χρησιμοποιώντας το view <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve\" title=\"django.contrib.staticfiles.views.serve\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles.views.serve()</span></code></a>.</p>\n<p>Αυτό, φυσικά, δεν είναι κατάλληλο για την παραγωγή (όταν δηλαδή το site σας είναι στον αέρα, διαθέσιμο για το ευρύ κοινό)! Για μερικές κοινές deployment στρατηγικές δείτε στο άρθρο <a class=\"reference internal\" href=\"/el/1.10/howto/static-files/deployment/\"><span class=\"doc\">ανεβάζοντας τα static files</span></a>.</p>\n<p>Για παράδειγμα, αν το <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> έχει οριστεί ως <code class=\"docutils literal notranslate\"><span class=\"pre\">/static/</span></code>, μπορείτε να κάνετε χρήση της <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve\" title=\"django.contrib.staticfiles.views.serve\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles.views.serve()</span></code></a>, μέσα στο αρχείο urls.py, ως εξής:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls.static</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">static</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ... the rest of your URLconf goes here ...</span>\n<span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">static</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">STATIC_URL</span><span class=\"p\">,</span> <span class=\"n\">document_root</span><span class=\"o\">=</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">STATIC_ROOT</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Σημείωση</p>\n<p>Αυτή η βοηθητική συνάρτηση δουλεύει μόνο σε debug mode (ήτοι το <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> είναι <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>) και μόνο αν το δοσμένο πρόθεμα είναι τοπικό  (πχ <code class=\"docutils literal notranslate\"><span class=\"pre\">/static/</span></code>) και όχι ένα URL (πχ <code class=\"docutils literal notranslate\"><span class=\"pre\">http://static.example.com/</span></code>).</p>\n<p>Επίσης, αυτή η βοηθητική συνάρτηση εξυπηρετεί μόνο το φάκελο <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a>. Δεν πραγματοποιεί την πραγματική αναζήτηση των static files, όπως κάνει η εφαρμογή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code></a>.</p>\n</aside>\n</section>\n<section id=\"serving-files-uploaded-by-a-user-during-development\">\n<span id=\"serving-uploaded-files-in-development\"></span><h2>Εξυπηρετώντας αρχεία τα οποία ανέβηκαν από έναν χρήστη κατά τη διάρκεια του development<a class=\"heading-anchor\" href=\"#serving-files-uploaded-by-a-user-during-development\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Στο Django, τα αρχεία που ανεβαίνουν στον server σας από κάποιον χρήστη (ή από τον admin μέσω του <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/admin/#module-django.contrib.admin\" title=\"django.contrib.admin: Django's admin site.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code></a>) ονομάζονται media files ή media assets και γι” αυτό το λόγο υπάρχει ένας διαχωρισμός μεταξύ των μεταβλητών στις ρυθμίσεις, πχ <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a>, <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a>, <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> και <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a>. Κατά τη διάρκεια του development, μπορείτε να εξυπηρετήσετε τα media files που ανέβηκαν από κάποιον χρήστη μέσω της ρύθμισης <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> χρησιμοποιώντας το view <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve\" title=\"django.contrib.staticfiles.views.serve\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles.views.serve()</span></code></a>.</p>\n<p>Αυτό, φυσικά, δεν είναι κατάλληλο για την παραγωγή (όταν δηλαδή το site σας είναι στον αέρα, διαθέσιμο για το ευρύ κοινό)! Για μερικές κοινές deployment στρατηγικές δείτε στο άρθρο <a class=\"reference internal\" href=\"/el/1.10/howto/static-files/deployment/\"><span class=\"doc\">ανεβάζοντας τα static files</span></a>.</p>\n<p>Για παράδειγμα, αν το <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a> έχει οριστεί ως <code class=\"docutils literal notranslate\"><span class=\"pre\">/media/</span></code>, μπορείτε να κάνετε χρήση της <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve\" title=\"django.contrib.staticfiles.views.serve\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles.views.serve()</span></code></a>, μέσα στο αρχείο urls.py, ως εξής:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls.static</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">static</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ... the rest of your URLconf goes here ...</span>\n<span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">static</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_URL</span><span class=\"p\">,</span> <span class=\"n\">document_root</span><span class=\"o\">=</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Σημείωση</p>\n<p>Αυτή η βοηθητική συνάρτηση δουλεύει μόνο σε debug mode (ήτοι το <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> είναι <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>) και μόνο αν το δοσμένο πρόθεμα είναι τοπικό  (πχ <code class=\"docutils literal notranslate\"><span class=\"pre\">/media/</span></code>) και όχι ένα URL (πχ <code class=\"docutils literal notranslate\"><span class=\"pre\">http://media.example.com/</span></code>).</p>\n</aside>\n</section>\n<section id=\"testing\">\n<span id=\"staticfiles-testing-support\"></span><h2>Τεστ<a class=\"heading-anchor\" href=\"#testing\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Όταν τρέχετε τα τεστ τα οποία χρησιμοποιούν πραγματικά HTTP requests αντί του προεγκατεστημένου testing client (πχ όταν χρησιμοποιείτε την κλάση <a class=\"reference internal\" href=\"/el/1.10/topics/testing/tools/#django.test.LiveServerTestCase\" title=\"django.test.LiveServerTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code></a>), τα static files θα χρειαστεί να εξυπηρετηθούν μαζί με το υπόλοιπο περιεχόμενο, προκειμένου το περιβάλλον του τεστ σας να αναπαράγει το πραγματικό περιβάλλον όσο πιο πιστά γίνεται. Αλλά η κλάση <code class=\"docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code> παρέχει μια πολύ βασική λειτουργία εξυπηρέτησης των static files: Δεν γνωρίζει τίποτα σχετικά με τη λειτουργία των finders της εφαρμογής <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> και προϋποθέτει ότι τα static files έχουν ήδη συγκεντρωθεί μέσα στο φάκελο <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a>.</p>\n<p>Εξαιτίας αυτού, η εφαρμογή <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> έρχεται με μια δική της κλάση <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django.contrib.staticfiles.testing.StaticLiveServerTestCase\" title=\"django.contrib.staticfiles.testing.StaticLiveServerTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles.testing.StaticLiveServerTestCase</span></code></a>, μια subclass της προεγκατεστημένης, η οποία έχει τη δυνατότητα να εξυπηρετεί με έναν παρόμοιο τρόπο με αυτόν που τρέχουμε κατά τη διάρκεια του development όταν το <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code>, διαφανώς, όλα τα assets κατά τη διάρκεια εκτέλεσης αυτών των τεστ, πχ χωρίς να χρειαστεί να τα συγκεντρώνουμε πρώτα, χρησιμοποιώντας την εντολή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a>.</p>\n</section>\n<section id=\"deployment\">\n<h2>Deployment<a class=\"heading-anchor\" href=\"#deployment\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Η εφαρμογή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code></a> παρέχει μια βολική διαχειριστική εντολή για να συγκεντρώσει (collect) όλα τα static files σε ένα μόνο φάκελο ούτως ώστε να τα εξυπηρετήσετε εύκολα.</p>\n<ol class=\"arabic\">\n<li><p>Θέστε τη ρύθμιση <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> στον φάκελο από τον οποίο θα θέλετε να εξυπηρετήσετε αυτά τα αρχεία. Για παράδειγμα:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">STATIC_ROOT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;/var/www/example.com/static/&quot;</span>\n</code></pre></div>\n</li>\n<li><p>Τρέξτε την εντολή <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>$ python manage.py collectstatic\n</code></pre></div>\n<p>Η εντολή αυτή θα αντιγράψει όλα τα αρχεία από τους επιμέρους φακέλους με το όνομα <code class=\"docutils literal notranslate\"><span class=\"pre\">static</span></code> (αν υπάρχουν) κάθε εφαρμογής και όλα τα αρχεία στους φακέλους που περιέχονται στη ρύθμιση <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATICFILES_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_DIRS</span></code></a> στον έναν και μοναδικό φάκελο <a class=\"reference internal\" href=\"/el/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a>.</p>\n</li>\n<li><p>Χρησιμοποιήστε έναν Web server της επιλογής σας για να εξυπηρετήσετε αυτά τα αρχεία. Το άρθρο <a class=\"reference internal\" href=\"/el/1.10/howto/static-files/deployment/\"><span class=\"doc\">ανεβάζοντας τα static files</span></a> καλύπτει μερικές κοινές deployment στρατηγικές για τα static files.</p></li>\n</ol>\n</section>\n<section id=\"learn-more\">\n<h2>Μάθετε περισσότερα<a class=\"heading-anchor\" href=\"#learn-more\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Αυτό το άρθρο κάλυψε τα βασικά και μερικές συνηθισμένες πρακτικές. Για πλήρεις λεπτομέρειες πάνω σε όλες τις ρυθμίσεις, εντολές, template tags και άλλα κομμάτια που περιέχονται στο <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code></a>, δείτε στο άρθρο <a class=\"reference internal\" href=\"/el/1.10/ref/contrib/staticfiles/\"><span class=\"doc\">αναφορά στα staticfiles</span></a>.</p>\n</section>","rootId":"managing-static-files-e-g-images-javascript-css","toc":[{"title":"Ρυθμίζοντας τα static files","anchor":"configuring-static-files","children":[]},{"title":"Εξυπηρετώντας τα static files κατά τη διάρκεια του development","anchor":"serving-static-files-during-development","children":[]},{"title":"Εξυπηρετώντας αρχεία τα οποία ανέβηκαν από έναν χρήστη κατά τη διάρκεια του development","anchor":"serving-files-uploaded-by-a-user-during-development","children":[]},{"title":"Τεστ","anchor":"testing","children":[]},{"title":"Deployment","anchor":"deployment","children":[]},{"title":"Μάθετε περισσότερα","anchor":"learn-more","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Οδηγοί «Πως-να»","url":"/el/1.10/howto/"}],"prev":{"docname":"howto/outputting-pdf","title":"Εξάγοντας αρχεία PDF με το Django","url":"/el/1.10/howto/outputting-pdf/"},"next":{"docname":"howto/static-files/deployment","title":"Ανεβάζοντας τα static files","url":"/el/1.10/howto/static-files/deployment/"},"formats":{"html":"/el/1.10/howto/static-files/","markdown":"/el/1.10/howto/static-files.md","json":"/el/1.10/howto/static-files.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/howto/static-files/index.txt","official":"https://docs.djangoproject.com/el/1.10/howto/static-files/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10"],"inLocales":["en","fr","ja","id","pt-br","es","el","pl"]}