44 votes

Django: comment servir les médias / feuilles de style et les relier à des modèles

Les Variations de cette question ont été posées, mais je suis toujours incapable d'obtenir mes feuilles de style pour charger correctement lors de mes modèles sont rendus.

Je suis d'essayer de servir statique des médias de l'Django processus au cours du développement - ce qui est fortement déconseillé dans la production, je suis au courant. Je vais poster ma configuration et mon modèle, et j'espère que quelqu'un peut m'aider à comprendre où je vais mal.

Notez que j'ai essayé de suivre l'exemple du projet Django site, mais il ne mentionne pas comment consulter vos feuilles de style à partir d'un modèle. J'ai aussi essayé beaucoup de différentes variations de la même chose, donc mon code/paramètres peut être un peu hors de ce qui est décrit.

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}),
    )

Dans mon template:

<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>

Je vous assure, les fichiers (modèles/media) sont dans le bon répertoire sur mon système de fichiers. Si il n'y a aucune information supplémentaire j'ai besoin de fournir, s'il vous plaît poster un commentaire.


Edit:

L'un des problèmes que j'avais était l'utilisation d'un '/' ajoutant à mes liens. Si la barre oblique est ajouté, le lien est ouvert à partir de la racine du site. Si il n'y a pas de barre oblique, le lien est ouvert dans le niveau actuel. Un exemple:

www.example.com/application a un lien "/app2/ et un lien "app3/".
app2 sera ouvert à partir de www.example.com/app2/ et app3 sera ouvert à partir de www.example.com/application/app3/. C'était déroutant, moi, je pense.

51voto

Ty. Points 1015

Je devais juste comprendre cela moi-même.

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>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )
 

fichier modèle:

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

Avec le fichier situé ici:

 "C:/Server/Projects/project_name/static/css/style.css"
 

6voto

bchhun Points 7116

J'ai l'habitude de faire mon propre Modèle simple balise parce que Django n'est pas de donner des fichiers CSS/JavaScript. Apache t-il donc, ma médias url est généralement 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

Et dans mon fichier de modèle:

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

Vous pouvez également faire votre propre contexte de préprocesseur pour ajouter le media_url variable dans chaque modèle.

2voto

Oli Points 65050

Je viens d'utiliser la dénomination absolue. Sauf si vous exécutez le site dans un chemin profond (ou même si vous le faites), je laisserais tomber les .. et opterais pour quelque chose comme:

 <link rel="stylesheet" type="text/css" href="http://stackoverflow.com/media/styles.css">
 

1voto

sykora Points 30290

J'ai quelques idées, je ne sais pas lequel est le travail pour moi :)

Assurez-vous d'utiliser une barre oblique et d'avoir ainsi être différente de la MEDIA_URL paramètre (depuis la même URL ne peut pas être mappé sur deux ensembles différents de fichiers).

C'est à partir de http://docs.djangoproject.com/en/dev/ref/settings/#admin-media-prefix

Deuxièmement, il se peut que vous êtes confus répertoires sur votre système de fichiers avec les chemins d'url. Essayez d'utiliser des url absolues, et ensuite d'affiner le bas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X