2011-12-02 15 views
10

Tengo una plantilla, base.html, que se utiliza en varias otras plantillas para varias vistas. Cada una de esas plantillas comienza con el {% extends "base.html" %} apropiado. En la plantilla base, quiero especificar una hoja de estilo estático de esta manera:STATIC_URL indefinido en la plantilla Django base

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/base.css"/> 

Sin embargo, cuando se hace la mayor parte de mis plantillas, el valor de STATIC_URL está vacía, por lo que el atributo no es más que href="/base.css", que no se carga . La variable está definida correctamente para la plantilla que he vinculado a la vista de inicio de sesión predeterminada, django.contrib.auth.views.login, pero para mis propias vistas personalizadas, no está definida.

Estoy intentando que esto funcione en el entorno de desarrollo con runserver, por lo que el archivo CSS está en el subdirectorio estático de la aplicación.

Éstos son los bits correspondientes de mi settings.py, que son todos los valores predeterminados:

# URL prefix for static files. 
# Example: "http://media.lawrence.com/static/" 
STATIC_URL = '/static/' 

# Additional locations of static files 
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
) 

# List of finder classes that know how to find static files in 
# various locations. 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
# 'django.contrib.staticfiles.finders.DefaultStorageFinder', 
) 

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.debug', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.media', 
    'django.core.context_processors.static', 
    'django.contrib.auth.context_processors.auth', 
    'django.contrib.messages.context_processors.messages', 
) 

En mi urls.py También he añadido:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

#... 

urlpatterns += staticfiles_urlpatterns() 

Alguna idea de lo que estoy haciendo mal? Por lo que puedo decir, esto es lo que se supone que debes hacer para servir archivos estáticos específicos de la aplicación en desarrollo, basado en the 1.3 documentation.

Respuesta

21

Tal vez esto puede ayudar:

Si {{}} STATIC_URL no está funcionando en su plantilla, es probable que no usando RequestContext cuando la prestación de los template.As un breve repaso , procesadores de contexto agregue variables en los contextos de cada plantilla . Sin embargo, los procesadores de contexto requieren que use RequestContext al procesar plantillas. Esto ocurre automáticamente si está usando una vista genérica, pero en las vistas escritas a mano necesitará para usar explícitamente RequestContext Para ver cómo funciona eso, y para leer más detalles, consulte Subclassing Context: RequestContext.

+2

Esto me condujo en la dirección correcta. (La sección que citó es [aquí] (https://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext)) No estaba llamando 'render_to_response' con' context_instance = RequestContext (solicitud) '. – UltraNurd

+0

¡agradable! feliz de ayudarlo;) – danihp

+2

Si está utilizando Django 1.3, no es necesario que pase manualmente en la instancia de contexto. El atajo de renderizado lo hará por usted: return render (request, 'the-template.html', {'foo': 'bar'}) – Brandon

0

Debe agregar 'django.core.context_processors.request' a su TEMPLATE_CONTEXT_PROCESSORS.

+0

Eso no parece haber cambiado nada. – UltraNurd

0

Usted puede añadir a STATIC_URL a la plantilla de representación al pasar

{'STATIC_URL': settings.STATIC_URL} 

o puede agregar procesador de contexto estático ver doc

+0

Tengo el procesador de contexto estático, pero eso solo no funcionaba. – UltraNurd

15

Es necesario añadir 'django.core.context_processors.static' a su variable TEMPLATE_CONTEXT_PROCESSORS en settings.py

+0

muchas gracias, @nicolas! – benesch

+0

En mi caso, no había agregado TEMPLATE_CONTEXT_PROCESSORS, aunque estaba usando un TemplateView genérico basado en clases que usa RequestContext, necesitaba esto en mis procesadores de contexto, como me explicó, para tener el {{STATIC_URL}} completar – harijay

Cuestiones relacionadas