Domanda

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

Sto provando a servire supporti statici dal processo Django durante lo sviluppo - che è fortemente scoraggiato nella produzione, ne sono consapevole. Pubblicherò la mia configurazione e il mio modello e spero che qualcuno possa aiutarmi a capire dove sbaglio.

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 molte diverse varianti della stessa cosa, quindi il mio codice / le mie impostazioni potrebbero essere un po 'diverse da quanto 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/

Nel 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 (template / media) sono nella directory corretta sul mio file system. Se sono necessarie ulteriori informazioni, è necessario pubblicare un commento.


Modifica:

Uno dei problemi che stavo riscontrando era l'uso di un '/' che anticipava i miei collegamenti. Se viene anteposta la barra, il collegamento viene aperto dalla radice del sito. Se non è presente alcuna barra, 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.

, 'dso.ovramt.views.index'), ) if settings.DEBUG: urlpatterns += patterns('', (r'^media/(?P<path>.*)

Nel mio modello:

<*>

Ti assicuro che i file (template / media) sono nella directory corretta sul mio file system. Se sono necessarie ulteriori informazioni, è necessario pubblicare un commento.


Modifica:

Uno dei problemi che stavo riscontrando era l'uso di un '/' che anticipava i miei collegamenti. Se viene anteposta la barra, il collegamento viene aperto dalla radice del sito. Se non è presente alcuna barra, 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.

, 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), )

Nel mio modello:

<*>

Ti assicuro che i file (template / media) sono nella directory corretta sul mio file system. Se sono necessarie ulteriori informazioni, è necessario pubblicare un commento.


Modifica:

Uno dei problemi che stavo riscontrando era l'uso di un '/' che anticipava i miei collegamenti. Se viene anteposta la barra, il collegamento viene aperto dalla radice del sito. Se non è presente alcuna barra, 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.

È stato utile?

Soluzione

Ho dovuto solo capirlo da solo.

settings.py:

MEDIA_ROOT = 'C:/Server/Projects/project_name/static/'
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'

urls.py:

from django.conf import settings
...
if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)

file modello:

<link rel="stylesheet" type="text/css" href="/static/css/style.css" />

Con il file che si trova qui:

"C:/Server/Projects/project_name/static/css/style.css"
, 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), )

file modello:

<*>

Con il file che si trova qui:

<*>

Altri suggerimenti

Django ha già un processo contestuale per MEDIA_URL, vedi Documentazione di Django .

Dovrebbe essere disponibile per impostazione predefinita (a meno che tu non abbia personalizzato CONTEXT_PROCESSORS e hai dimenticato di aggiungerlo) in un RequestContext.

Di solito creo il mio semplice tag Template perché Django non fornisce file CSS / JavaScript. Apache lo fa in modo che il mio URL media sia di solito http://static.mysite.com .

YourApp / templatetags / media_url.py:

from django.template import Library
from yourapp.settings import MEDIA_URL
register = Library()

@register.simple_tag
def media_url():
    return MEDIA_URL

E nel mio file modello:

{% load media_url %}
<link href="{{ media_url }}css/main.css" rel="stylesheet" type="text/css">

Puoi anche rendere il tuo proprio preprocessore di contesto per aggiungere la variabile media_url in ogni modello.

Uso solo la denominazione assoluta. A meno che tu non stia eseguendo il sito in un percorso profondo (o anche se lo sei), lascerei cadere il .. e cercherei qualcosa di simile:

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

Ho un paio di idee, non so quale di esse funzioni per me :)

  

Assicurati di utilizzare una barra finale e di farla differire dall'impostazione MEDIA_URL (poiché lo stesso URL non può essere mappato su due diversi set di file).

Proviene da http: //docs.djangoproject. com / it / dev / ref / impostazioni / # admin-media-prefix

In secondo luogo, è possibile che tu stia confondendo le directory sul tuo filesystem con percorsi URL. Prova a utilizzare gli URL assoluti, quindi perfezionali.

Ho pensato di intervenire rapidamente. Mentre tutte le proposizioni qui funzionano bene e io uso l'esempio di Ty durante lo sviluppo, una volta che colpisci la produzione potresti voler scegliere di servire i file tramite un semplice Apache o qualsiasi altro server che stai usando.

Quello che faccio è impostare un sottodominio al termine dello sviluppo e sostituire tutti i collegamenti a supporti statici. Ad esempio:

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

I motivi per farlo sono duplici. In primo luogo, sembra che sarebbe più lento avere Django 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 dei tuoi utenti.

Un'altra cosa da aggiungere è che se si dispone di un media server separato su un sottodominio / dominio diverso, è possibile disabilitare i cookie per i supporti statici. Risparmia un po 'di elaborazione e larghezza di banda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top