[Python] Django: come servi media / fogli di stile e link a loro all'interno di modelli



Answers

Django ha già un processo di contesto per MEDIA_URL, vedi la documentazione di Django .

Dovrebbe essere disponibile di default (a meno che tu abbia personalizzato CONTEXT_PROCESSORS e dimenticato di aggiungerlo) in un RequestContext.

Question

Sono state poste delle varianti a questa domanda, ma non riesco ancora a caricare correttamente i fogli di stile quando vengono renderizzati i miei modelli.

Sto cercando di servire i media statici dal processo Django durante lo sviluppo - cosa che è fortemente scoraggiata nella produzione, ne sono consapevole. Pubblicherò la mia configurazione e il mio modello, e spero che qualcuno possa aiutarmi a capire dove sto andando male.

Nota che ho provato a seguire l'esempio sul sito web del progetto Django, tuttavia non menziona come fare riferimento ai tuoi fogli di stile da un modello. Ho anche provato diverse varianti della stessa cosa, quindi il mio codice / impostazioni potrebbe essere leggermente diverso da quello descritto.

settings.py

MEDIA_ROOT = 'D:/Dev Tools/django_projects/dso/media'
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/media/'

urls.py

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/(.*)', admin.site.root),
    (r'^ovramt/$', 'dso.ovramt.views.index'),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )

All'interno del mio modello:

<head> 
<title> {% block title %} DSO Template {% endblock %} </title> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<link rel="stylesheet" type="text/css" href="../media/styles.css">
</head>

Ti assicuro che i file (templates / media) sono nella directory corretta sul mio file system. Se ci sono ulteriori informazioni che devo fornire, per favore pubblica un commento.

Modificare:

Uno dei problemi che stavo avendo era l'uso di un "/" anteponendo i miei collegamenti. Se la barra diretta è anteposta, il collegamento viene aperto dalla radice del sito. Se non vi è alcuna barra in avanti, il collegamento viene aperto nel livello corrente. Un esempio:

www.example.com/application/ ha un link "/ app2 / e un link" app3 / ".
l'app2 si aprirà su www.example.com/app2/ e l'app3 si aprirà su www.example.com/application/app3/. Questo mi confondeva, penso.




Uso solo la denominazione assoluta. A meno che tu non stia conducendo il sito in un percorso profondo (o anche se lo sei), lascerei cadere .. e andrò per qualcosa del tipo:

<link rel="stylesheet" type="text/css" href="/media/styles.css">



Ho solo pensato di farmi ascoltare velocemente. Sebbene tutte le proposizioni qui funzionino perfettamente, e io uso l'esempio di Ty durante lo sviluppo, una volta raggiunto il livello di produzione, potresti decidere di pubblicare i file tramite Apache o qualsiasi altro server che stai utilizzando.

Quello che faccio è impostare un sottodominio una volta completato lo sviluppo e sostituire tutti i collegamenti a supporti statici. Per esempio:

<link rel="stylesheet" type="text/css" href="http://static.mydomain.com/css/style.css" />

I motivi per farlo sono duplici. Innanzitutto, sembra che sarebbe più lento avere Django a gestire queste richieste quando non è necessario. In secondo luogo, poiché la maggior parte dei browser può effettivamente scaricare file contemporaneamente da 3 domini diversi, l'utilizzo di un secondo sottodominio per i file statici accelera la velocità di download degli utenti.




Links