Saya bingung static root
dan ingin mengklarifikasi sesuatu.
Untuk melayani berkas statis dalam Django, berikut ini harus dalam settings.py
dan urls.py
:
import os
PROJECT_DIR=os.path.dirname(__file__)
1. Path absolut ke direktori tempat file statis harus dikumpulkan
STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')
2. Awalan URL untuk file statis
STATIC_URL = '/static/'
3. Lokasi tambahan untuk file statis
STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)
... dan di urls.py
baris berikut:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
r'^static/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.STATIC_ROOT}
))
4. Kami juga menggunakan python manage.py collectstatic
Pertanyaan:
Adakah yang bisa menjelaskan alur kerja kepada saya: bagaimana seharusnya hal-hal idealnya dilakukan. Sekarang, saya menyalin / menempelkan cuplikan kode di atas ke lokasi yang ditentukan dan terus membuat file baru di direktori statis dan berhasil. Dalam saya
settings.STATIC_ROOT
, bagaimanapun, saya telah menunjuk ke direktori yang berbeda.Akan sangat bagus jika seseorang dapat menjelaskan alur kerja setiap pengaturan: bagaimana file dikumpulkan dan dikelola, dan praktik yang baik untuk diikuti.
Terima kasih.
django
django-urls
django-staticfiles
pengguna993563
sumber
sumber
if settings.DEBUG:
django tidak terlalu baik dalam melayani media statis, ini harus diserahkan ke server web yang sebenarnya.Jawaban:
STATIC_ROOT
sekarang perintah
./manage.py collectstatic
akan menyalin semua file statis (yaitu di folder statis di aplikasi Anda, file statis di semua jalur) ke direktori/var/www/example.com/static/
. sekarang Anda hanya perlu melayani direktori ini di apache atau nginx..etc.STATIC_URL
Jika Anda mengatur
STATIC_URL = 'http://static.example.com/'
, maka Anda harus melayaniSTATIC_ROOT
folder (yaitu"/var/www/example.com/static/"
) oleh apache atau nginx di url'http://static.example.com/'
(sehingga Anda dapat merujuk file statis'/var/www/example.com/static/jquery.js'
dengan'http://static.example.com/jquery.js'
)Sekarang di django-templates Anda, Anda dapat merujuknya dengan:
yang akan membuat:
sumber
{{ STATIC_URL }}jquery.js
dan{% static "jquery.js" %}
yang sama. yaitu keduanya akan kembali/static/jquery.js
. Versi django yang lebih baru merekomendasikan untuk digunakan{% static "jquery.js" %}
, tetapi Anda perlu memuat templatetag, mis{% load staticfiles %}
. dalam versi django yang lebih lama merekomendasikan{{STATIC_URL}}
static
metode alih-alihSTATIC_URL
metode, dan bug itu hilang. Panggilan bagus atas saran berdasarkan versi.STATICFILES_DIRS
: Anda dapat menyimpan file statis untuk proyek Anda di sini, misalnya yang digunakan oleh template Anda.STATIC_ROOT
: biarkan kosong, jika Anda melakukannyamanage.py collectstatic
, ini akan mencari semua file statis di sistem Anda dan memindahkannya ke sini. Server file statis Anda seharusnya dipetakan ke folder ini di mana pun lokasinya. Periksa setelah menjalankan collectstatic dan Anda akan menemukan struktur direktori yang telah dibangun oleh django.-------- Edit ----------------
Seperti ditunjukkan oleh @DarkCygnus, STATIC_ROOT harus menunjuk ke direktori pada sistem berkas Anda, map tersebut harus kosong karena akan diisi oleh Django.
atau
-------- Akhiri Edit -----------------
STATIC_URL
: '/ static /' biasanya baik-baik saja, ini hanya awalan untuk file statis.sumber
STATICFILES_DIRS
harus berfungsi sebagai direktori tambahan untuk file statis. Jika Anda meletakkan semua css / js / gambar Anda ke dalam folder APP_NAME / static / APP_NAME, maka tidak perlu ditentukanSTATICFILES_DIRS
.settings.py
(dengan melakukanSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
) sebelum menjalankan perintah collectstatic .Semua jawaban di atas bermanfaat tetapi tidak ada yang menyelesaikan masalah saya. Dalam file produksi saya, STATIC_URL saya adalah
https://<URL>/static
dan saya menggunakan STATIC_URL yang sama di file dev settings.py saya.Ini menyebabkan kegagalan diam-diam dalam django / conf / urls / static.py.
Tes
elif not settings.DEBUG or '://' in prefix:
mengambil '//' di URL dan tidak menambahkan pola URL statis, menyebabkan tidak ada file statis yang ditemukan.Akan bijaksana jika Django mengeluarkan pesan kesalahan yang menyatakan Anda tidak dapat menggunakan
http(s)://
denganDEBUG = True
Saya harus mengubah STATIC_URL menjadi '/ static /'
sumber