Statische Dateien sind erforderlich, um eine Vielzahl von Designs zu erzielen.
In Django gibt es zwei Arten von statischen Dateien. Das erste sind vorab hochgeladene statische Dateien wie JavaScript, CSS und Image. Das zweite sind vom Benutzer hochgeladene MP4s und PDFs. Solche Dateien werden als Mediendateien bezeichnet.
8.1 Static Files Legen Sie statische Dateien in einem statischen Ordner in jeder APP ab.
Zum Beispiel:
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
Bei Verwendung mit Vorlage: {% 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 kann in settings.py für den Ordner für statische Dateien angegeben werden.
e.g.
#STATISCHE DATEIEN Dateizugriffspfad
STATIC_URL = '/static/'
#STATISCHE DATEIEN Datei speichern PATH
STATIC_ROOT = '/static/'
8.2 Media Files
Geben Sie den Parameter MEDIA_ROOT in settings.py an. e.g.
#Mediendatei speichern PATH
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#Zugriff auf den Mediendateipfad
MEDIA_URL = '/media/'
models.py Wie schreibe ich:
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)
...
Der Parameter upload_to von FileFiled gibt einen Unterordner an.
Für MEDIA_ROOT = os.path.join (BASE_DIR, 'media')
, FileField (upload_to = 'files')
:
Die hochgeladenen Dateien werden in . / Media / files /
gespeichert.
views.py Wie schreibe ich: Zum Zeitpunkt des Uploads:
...
def play(request, id):
f = File.objects.get(id=id)
data = {'video': f}
#Verwenden Sie den URL-Wert
data['url'] = f.filedata.url
return render(request, 'player.html', data)
...
Dateiverwendung:
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')
...
Wie schreibe ich Vorlage:
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>
Wie schreibe ich Projekt urls.py:
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)
So löschen Sie eine Datei:
Vergessen Sie nicht, Dateien in der Datenbank zu löschen, nicht nur Objekte:
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:
#Verwenden Sie den Pfadwert
os.remove(existfileObj.filedata.path)
os.remove(existfileObj.filepic.path)
existfileObj.delete()
...
Recommended Posts