2009-07-04 14 views
18

He estado publicando con éxito archivos multimedia para los archivos MEDIA normales, pero cuando intenté publicar archivos multimedia admin, falle. por favor amablemente ayúdenme a localizar el problema, ya que he tratado de solucionar el problema por varias horas sin suerte (he estado buscando en Google y también he leído el documento de django sobre cómo servir archivos estáticos).Django: sirviendo archivos multimedia ADMIN

El error mientras intentaba acceder a localhost: 8000/media/a.gif es la siguiente:

Page not found: f:\python25\lib\site-packages\django/contrib/admin/media\a.gif

puse los archivos de administración de medios de comunicación en el directorio llamado "media", mientras pongo los medios normales archivos en el directorio llamado "static". Estoy en Windows, también.

Así es como me sirven los archivos ordinarios en los medios de comunicación urls.py:

# serve static files 
from django.conf import settings 
if settings.ENVIRONMENT==settings.ENV_DEVELOPMENT: 
    urlpatterns += patterns("django.views", 
     url(r"%s(?P<path>.*)$" % settings.MEDIA_URL[1:], "static.serve", {"document_root": settings.MEDIA_ROOT,}) 
    ) 

Y mi settings.py (sólo las piezas importantes):

import project_path 
MEDIA_ROOT = project_path.MEDIA.replace('\\','/') 
MEDIA_URL = '/static/' 
ADMIN_MEDIA_PREFIX = '/media/' 
TEMPLATE_DIRS = (
    project_path.TEMPLATE.replace('\\','/'), 
) 

Y mi project_path.py:

import sys 
from os.path import dirname, join 
ROOT = dirname(__file__) 
APP = join(ROOT, "apps") 
TEMPLATE = join(ROOT, "templates") 
MEDIA = join(ROOT, "static") 
ADMIN_MEDIA = join(ROOT, "media") 

¿Alguna sugerencia?

o tal vez al menos por favor, comparta ¿cómo servir a sus archivos multimedia de administración (sin cambiar cualquier archivo desde el servidor web, pero sólo a través del código fuente de Django)

Gracias de antemano :)

+0

¿Alguna vez resolvió esto? Estoy teniendo una experiencia similar trabajando en Mac con Django 1.1, sirviendo archivos de medios normales pero no para el administrador ... – Danielb

+0

El motivo por el que la configuración de la URL no funciona es porque 'django/core/management/commands/runserver. py' junto con 'django.core.servers.basehttp' configura un controlador WSGI para' ADMIN_MEDIA_PREFIX'. Maneja la solicitud antes de que el URLconf se golpee – vdboor

Respuesta

1

Try cambiante:

ADMIN_MEDIA_PREFIX = '/static/media/'

Esto supone que su MEDIA_ROOT/media/contiene la carpeta de medios de administrador (que es lo que entendí de su pregunta).

+0

gracias por la respuesta, pero todavía no funciona :) Escribí http: // localhost: 8000/static/media/a.gif en la url de broswer y el resultado es: Página no encontrada: f: \ python25 \ lib \ site-packages \ django/contrib/admin/media \ a.gif –

+0

Creo que intentaré volver a crear el proyecto desde cero utilizando los ejemplos de medios de administración convencionales :) gracias por las respuestas –

2

Trate

(r '^ admin_media /(.*)', '', django.views.static.serve { 'DOCUMENT_ROOT': 'django/contrib/admin/media /', '' show_indexes : Verdadero}),

en su archivo urls.py. Y cambie su

ADMIN_MEDIA_PREFIX = '/admin_media/' 
+0

gracias por la respuesta, pero todavía no funciona :) Escribí http: // localhost: 8000/admin_media/a.gif en la url de broswer y el resultado es: Página no encontrada: f: \ python25 \ lib \ site-packages \ django/contrib/admin/media \ a.gif –

2

Acabo de arreglar un error similar en mi sitio de prueba. ADMIN_MEDIA_PREFIX y MEDIA_URL nunca debe ser la misma, ver la siguiente nota en el docs:

Make sure to use a trailing slash, and to have this be different from the MEDIA_URL setting (since the same URL cannot be mapped onto two different sets of files).

32

Su respuesta es que a menos que ADMIN_MEDIA_PREFIX establece explícitamente un dominio el comando de ejecución del servidor servirá a cabo los archivos de los medios de administración de contrib.admin.

Me quemé este magic comportamiento, también. Había un boleto para esto (Ticket #8336), pero la decisión de diseño fue dejar la conveniencia y la confusión tal como están.

Así que para servir a sus medios de comunicación de administración (para el uso de la piel de administración Grappelli o lo que sea que desee utilizar) de sus directorios con el comando runserver usted tiene que usar algo como:

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/') 
ADMIN_MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'admin-media/') 
MEDIA_URL = '/site-media/' 
ADMIN_MEDIA_PREFIX = 'http:/localhost:8000/admin-media/' 

espero estoy resucitar el pregunta correcta aquí. Disculpas de antemano.

+0

gracias, yo también me quemé en este – orwellian

+0

Perfecto. Gracias por esto. –

+3

Comportamientos mágicos de conveniencia. Gracias Django! ¿Qué hay de los valores predeterminados razonables en settings.py en su lugar? (suspiro) ... gracias por este Phoku! – Rich

3

Se recomienda ejecutar el servidor dev un poco diferente [1] python manage.py runserver mydomain.com:8000 --adminmedia =/ruta/a/su/admin/media/

[ 1] http://code.google.com/p/django-grappelli/wiki/Installation

+2

Debe ser específico de django-grappelli. Con vanjan Django 1.2, me sale 'error: no existe tal opción: --adminmedia' –

+0

No, la explicación es [aquí] [1]:" Si está activada la aplicación contrib staticfiles (por defecto en nuevos proyectos) el comando runserver será anulado con un comando propio runserver que no tiene la opción --adminmedia debido a deprecation. " [1]: https://docs.djangoproject.com/en/dev/ref/django-admin/ – eedeep

1

Desde la inclusión de staticfiles en el trunk, (alrededor de 1.3 creo), la magia ADMIN_MEDIA_PREFIX ya no se usa.

Actualmente, runserver asume su STATIC_URL + 'admin /'. Silenciosa y secretamente intercepta tus solicitudes, ignora todos tus urlconf e intenta volverte loco.

+1

Encontré lo opuesto: con django 1.3 si no tenía ADMIN_MEDIA_PREFIX = posixpath.join (STATIC_URL, "admin/") (es decir, si simplemente no hubiera configurado ADMIN_MEDIA_PREFIX en absoluto), runserver no sirvió correctamente mi medio de administración. – eedeep

0

tratar de utilizar STATICFILES_DIRS como golpe

# 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. 
    ("images", os.path.join(STATIC_ROOT,'images').replace('\\','/')), 
    ("css", os.path.join(STATIC_ROOT,'css').replace('\\','/')), 
    ("js",  os.path.join(STATIC_ROOT,'js').replace('\\','/')), 
) 

Tener un Goodluck!

+1

STATICFILES_DIRS = ( ("media", os.path.join (STATIC_ROOT, 'media'). Replace ('\\', '/')), ) – HUHU