template django routing path media admin

template - django admin cookbook



Django: sirviendo archivos multimedia ADMIN (7)

He estado sirviendo con éxito archivos de medios para los archivos de MEDIA normales, pero cuando intenté servir archivos de medios de administración, fallé. Por favor, ayúdenme a localizar el problema, ya que he intentado solucionar el problema durante varias horas sin suerte (también he estado buscando en Google y leyendo el documento de Django sobre el servicio de archivos estáticos).

El error al intentar acceder a localhost: 8000 / media / a.gif es el siguiente:

Página no encontrada: f: / python25 / lib / site-packages / django / contrib / admin / media / a.gif

Puse los archivos de medios de administración en el directorio llamado "medios", mientras que puse los archivos de medios normales en el directorio llamado "estático". También estoy en Windows.

Así es como sirvo los archivos de medios ordinarios en 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 (solo 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 pista?

o quizás al menos comparta cómo sirve sus archivos de medios de administración (sin cambiar ningún archivo del servidor web, pero solo a través del código fuente de django)

Gracias por adelantado :)


Acabo de corregir un error similar en mi sitio de prueba. ADMIN_MEDIA_PREFIX y MEDIA_URL nunca deben ser iguales, consulte la siguiente nota en la docs :

Asegúrese de usar una barra diagonal final y que esto sea diferente de la configuración MEDIA_URL (ya que la misma URL no se puede asignar a dos conjuntos de archivos diferentes).


Desde la inclusión de archivos estáticos en el tronco, (alrededor del 1.3 creo), la magia ADMIN_MEDIA_PREFIX ya no se usa.

Hoy en día, runserver asume su STATIC_URL + ''admin /''. Secretamente y en silencio intercepta tus solicitudes, ignora todas las urlconf e intenta volverte loco.


Intenta cambiar:

ADMIN_MEDIA_PREFIX = ''/static/media/''

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


Intenta usar 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(''//',''/'')), )

¡Ten buena suerte!



Su respuesta es que, a menos que ADMIN_MEDIA_PREFIX establezca explícitamente un dominio, el comando runserver servirá los archivos de medios de administración desde contrib.admin.

También me quemé con este comportamiento mágico . Había un boleto para esto ( Boleto # 8336 ), pero la decisión de diseño fue dejar la conveniencia y la confusión como están.

Entonces, para servir sus medios de administración (para usar grappelli o cualquier máscara de administrador que quiera usar) desde sus directorios con el comando runserver , 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 estar resucitando la pregunta correcta aquí. Disculpas por adelantado.


Tratar

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

en su archivo urls.py Y cambia tu

ADMIN_MEDIA_PREFIX = ''/admin_media/''