usar template plantillas para bootstrap python css django django-templates media

python - template - plantillas html para django



Django: ¿cómo se sirven los medios/hojas de estilo y se vinculan con las plantillas? (7)

Solo uso nombres absolutos. A menos que estés ejecutando el sitio en una ruta profunda (o incluso si lo haces), dejaré el .. e iré por algo como:

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

Se han formulado variaciones de esta pregunta, pero sigo sin poder cargar mis hojas de estilo correctamente cuando se procesan mis plantillas.

Estoy tratando de servir medios estáticos del proceso de Django durante el desarrollo, que estoy desaconsejado en la producción. Publicaré mi configuración y mi plantilla, y espero que alguien me ayude a comprender dónde me estoy equivocando.

Tenga en cuenta que traté de seguir el ejemplo en el sitio web del proyecto Django, sin embargo, no menciona cómo hacer referencia a sus hojas de estilo desde una plantilla. También probé muchas variaciones diferentes de la misma cosa, por lo que mi código / configuración puede estar un poco alejado de lo que se describe.

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

Dentro de mi plantilla:

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

Te aseguro que los archivos (plantillas / medios) están en el directorio correcto en mi sistema de archivos. Si hay alguna información adicional que necesito proporcionar, publique un comentario.

Editar:

Uno de los problemas que tuve fue el uso de un ''/'' anteponiendo mis enlaces. Si se agrega una barra diagonal, el enlace se abre desde la raíz del sitio. Si no hay una barra inclinada, el enlace se abre en el nivel actual. Un ejemplo:

www.example.com/application/ tiene un enlace "/ app2 / y un enlace" app3 / ".
la aplicación2 se abrirá en www.example.com/app2/ y la aplicación3 se abrirá en www.example.com/application/app3/. Esto me estaba confundiendo, creo.


Tengo un par de ideas, no sé cuál de ellas me funciona :)

Asegúrese de utilizar una barra inclinada y de que sea diferente de la configuración MEDIA_URL (ya que la misma URL no puede asignarse a dos conjuntos diferentes de archivos).

Eso es de http://docs.djangoproject.com/en/dev/ref/settings/#admin-media-prefix

En segundo lugar, puede ser que esté confundiendo directorios en su sistema de archivos con rutas de URL. Intente usar direcciones URL absolutas y luego refínclelas.


Solo pensé en tocar el timbre rápidamente. Si bien todas las proposiciones aquí funcionan bien, y utilizo el ejemplo de Ty durante el desarrollo, una vez que accedas a la producción, puedes optar por enviar archivos a través de un Apache directo, o cualquiera que sea el servidor que estés utilizando.

Lo que hago es configurar un subdominio una vez que termino de desarrollar, y reemplazar todos los enlaces a medios estáticos. Por ejemplo:

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

Las razones para hacer esto son dobles. Primero, parece que sería más lento hacer que Django maneje estas solicitudes cuando no las necesite. En segundo lugar, dado que la mayoría de los navegadores pueden descargar archivos simultáneamente desde 3 dominios diferentes, usar un segundo subdominio para sus archivos estáticos realmente acelerará la velocidad de descarga de sus usuarios.


Django ya tiene un proceso de contexto para MEDIA_URL, consulte la documentación de Django .

Debe estar disponible de manera predeterminada (a menos que haya personalizado CONTEXT_PROCESSORS y olvidó agregarlo) en un RequestContext.


Otra cosa que debes agregar es que si tienes un servidor de medios separado en un subdominio / dominio diferente, puedes deshabilitar las cookies para tus medios estáticos. Ahorra un poco de procesamiento y ancho de banda.


Solo tuve que resolver esto yo mismo.

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

archivo de plantilla:

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

Con el archivo ubicado aquí:

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


Normalmente hago mi propia etiqueta Plantilla simple porque Django no está dando archivos CSS / JavaScript. Apache lo hace así que mi url de medios es usualmente 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

Y en mi archivo de plantilla:

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

También puede crear su propio preprocesador de contexto para agregar la variable media_url en cada plantilla.