Django Note 4

8 Personnalisation HTML (fichier d'application Web)

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

Django Note 4
Django Note 5
Django Note 1
Django Note 3
Django Note 2
Note
Django
Note
Note
Note du didacticiel Django Girls
(Note) Django dans l'environnement Vagrant
mise à jour de Django
note de pyenv
[Note] Création et terminologie du projet Django
Mémorandum Django
recherche django
Installation de Django
GroupBy Remarque
Résumé de Django
Test Django
Django # 2 (modèle)
argparse note
Django Hands On
Remarque: Python
Touchez django
Mémo Django
Résumé de Django
Les bases de Django
Django Shoho
Paramètres initiaux de Django
Note d'Ansible
Django + Docker
Glossaire Django
Note de Python
Installation de Django
[Note] Exécutez Django sur Amazon Linux 2
Django: Références
Remarque: envoyer un e-mail avec Django
note de direnv
Démarrage de Django
Mémo Django
[Note] RepresenterError
Django NullCharField
Déployer l'API Django avec heroku (mémo personnel)
(Remarque) Ordre de recherche des fichiers modèles dans Django
Remarques sur l'activation de PostgreSQL avec Django
Remarque DJango: depuis le début (traitement de formulaire)
Construction de l'environnement Django
[Note] Redimensionnement de l'image
Note d'apprentissage Python_002
Django ~ édition settings.py ~
Remarque: décorateur Python
Note de programmation Python
Django Heroku Deploy 1
[Python] Note d'apprentissage 1
Modèle HTML Django partie 2
Formulaire de demande Django 2
Django a commencé la partie 1
Modèle Django: ManyToManyField