Des fichiers statiques sont nécessaires pour réaliser une variété de conceptions.
Il existe deux types de fichiers statiques dans Django. Le premier est des fichiers statiques pré-téléchargés comme JavaScript, CSS et Image. Le second concerne les fichiers MP4 et PDF téléchargés par l'utilisateur. Ces fichiers sont appelés fichiers multimédias.
8.1 Static Files Placez les fichiers statiques dans un dossier statique à l'intérieur de chaque application.
Par exemple:
mysite/
manage.py
mysite/
static/
css/
bootstrap.min.css
js/
bootstrap.min.js
__init__.py
settings.py
urls.py
wsgi.py
myapp/
static/
css/
bootstrap.min.css
js/
bootstrap.min.js
templates/
__init__.py
admin.py
apps.py
models.py
tests.py
urls.py
views.py
Lors de l'utilisation avec un modèle: {% static 'file PATH' %}
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
{% load static %}
</head>
<body>
<p>Test Page</p>
<script src="{% static 'js/bootstrap.min.js' %}"/>
</body>
</html>
STATIC_URL peut être spécifié dans settings.py pour le dossier des fichiers statiques.
e.g.
#CHEMIN D'ACCÈS AUX FICHIERS STATIQUES
STATIC_URL = '/static/'
#FICHIERS STATIQUES Chemin de sauvegarde des fichiers
STATIC_ROOT = '/static/'
8.2 Media Files
Spécifiez le paramètre MEDIA_ROOT dans settings.py. e.g.
#PATH de sauvegarde du fichier multimédia
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#PATH d'accès au fichier multimédia
MEDIA_URL = '/media/'
models.py Comment écrire:
models.py
...
class File(models.Model):
filedata = models.FileField(upload_to='files')
filepic = models.ImageField(null=True, upload_to='pics')
uploadtime = models.DateTimeField('updated time', default = timezone.now)
...
Le paramètre upload_to de FileFiled spécifie un sous-dossier.
Pour MEDIA_ROOT = os.path.join (BASE_DIR, 'media')
, FileField (upload_to = 'files')
:
Les fichiers téléchargés sont enregistrés dans . / Media / files /
.
views.py Comment écrire: Au moment du téléchargement:
...
def play(request, id):
f = File.objects.get(id=id)
data = {'video': f}
#Utiliser la valeur URL
data['url'] = f.filedata.url
return render(request, 'player.html', data)
...
Utilisation du fichier:
views.py
...
def uploadfile(request):
if request.method != 'POST':
return render(request, 'upload.html')
if not form.is_valid():
return render(request, 'upload.html')
if 'filedata' in request.FILES:
filedata = request.FILES['filedata']
else:
return render(request, 'upload.html')
if 'filepic' in request.FILES:
filepic = request.FILES['filepic']
else:
filepic = None
try:
f = File(filedata=filedata, filepic=filepic)
f.save()
return render(request, 'success.html')
except:
return render(request, 'upload.html')
...
Comment écrire un modèle:
player.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
{% load static %}
</head>
<body>
<video src={{ url }} width="640" height="480" preload="none" autoplay class="videoPlayer" controls="controls">
Your browser does not support the video tag.
</video>
<script src="{% static 'js/bootstrap.min.js' %}"/>
</body>
</html>
Comment écrire les urls.py du projet:
urls.py
from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^play/(?P<id>\d+)/$', views.play, name='play'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Pour supprimer un fichier:
N'oubliez pas de supprimer les fichiers de la base de données, pas seulement les objets:
views.py
...
try:
existfileObj = File.objects.get(filename=filename)
os.remove(existfileObj.filedata.path)
existfileObj.delete()
except File.DoesNotExist:
print('File in not exist.')
existfileObj = None
else:
#utiliser la valeur du chemin
os.remove(existfileObj.filedata.path)
os.remove(existfileObj.filepic.path)
existfileObj.delete()
...
Recommended Posts