Bueno, un poco grepping alrededor en el código de muestra que puede haber un mensaje de error más profundo que quedó homogeniza a lo largo del camino.
en django/core/archivos/storage.py, la línea 210 (esto es en 1.1.1) tenemos:
def path(self, name):
try:
path = safe_join(self.location, name)
except ValueError:
raise SuspiciousOperation("Attempted access to '%s' denied." % name)
return smart_str(os.path.normpath(path))
también lo ha hecho el error de estar saliendo de safe_join().
En django/utils/_os.py, tenemos lo siguiente. Tenga en cuenta el ValueError que arroja sobre la tercera a la última línea:
===========================
def safe_join(base, *paths):
"""
Joins one or more path components to the base path component intelligently.
Returns a normalized, absolute version of the final path.
The final path must be located inside of the base path component (otherwise
a ValueError is raised).
"""
# We need to use normcase to ensure we don't false-negative on case
# insensitive operating systems (like Windows).
base = force_unicode(base)
paths = [force_unicode(p) for p in paths]
final_path = normcase(abspathu(join(base, *paths)))
base_path = normcase(abspathu(base))
base_path_len = len(base_path)
# Ensure final_path starts with base_path and that the next character after
# the final path is os.sep (or nothing, in which case final_path must be
# equal to base_path).
if not final_path.startswith(base_path) \
or final_path[base_path_len:base_path_len+1] not in ('', sep):
raise ValueError('the joined path is located outside of the base path'
' component')
return final_path
==================
Hmmm, "La ruta unida está ubicada fuera del componente de la ruta base". Ahora hay un par de llamadas a abspathu() allí (que se define justo arriba de esta rutina y es diferente para NT que para otros sistemas operativos). abspathu() convierte todas las rutas no absolutas en absolutas al hacer tachuelas en os.cwdu(), el directorio de trabajo actual.
Pregunta: ¿Por casualidad tiene un enlace simbólico (enlace simbólico) a su directorio multimedia? En otras palabras, ¿no es un hijo directo del directorio del proyecto? No sé si esta es una pregunta válida, simplemente salió de mi cabeza.
Pregunta: ¿Cuáles son los valores de self.location
y name
que se están pasando a safe_join()?
Salvaje-adivinanza: ¿es self.location
vacío?
Otro asno salvaje: ¿MEDIA_ROOT de alguna manera se cambió a /media/
?
Si tienes tu propia copia de Django instalada (no es difícil de hacer), intenta poner algunas instrucciones de impresión en estas rutinas y luego ejecútalas como servidor de desarrollo. La salida de impresión irá a la consola.
Actualización: Hmmm. Usted dijo "2) Los valores para self.location y name son:/home/tsoporan/site/media y /media/albums/anthem-for-the-underdog/30103635.jpg"
Hace la siguiente ruta de acceso ¿cualquier sentido?
"/home/tsoporan/site/media/media/albums/anthem-for-the-underdog"
Nota del .../media/media/... allí.
Además, ¿qué sistema operativo es este? Django rev?
cómo están sirviendo archivos estáticos? ¿Qué url estás usando para los archivos estáticos? Sirviendo – czarchaic
archivos estáticos con nginx a través de Apache ProxyPass: igual: ProxyPass/medios http: // localhost: 5000/ ProxyPassReverse/medios http: // localhost: 5000/ – tsoporan
Editar: El comentario anterior fue despojado ver http://dpaste.com/hold/136840/ – tsoporan