2011-02-27 25 views
5

Estoy ejecutando Satchmo. Hay muchas aplicaciones y he cambiado parte de la fuente en la aplicación Producto.¿Cómo sobrescribir una aplicación en Django correctamente?

Así que mi pregunta es cómo puedo anular esto correctamente porque el cambio es específico del sitio. ¿Tengo que copiar todo el marco de Satchmo y ponerlo en mi proyecto o puedo simplemente copiar una de las aplicaciones y colocarla en decir Satchmo> Aplicación> Productos? (Un poco gustaría con plantillas)

Gracias

Respuesta

4

Lo que he hecho que funciona es copiar la aplicación que he cambiado. En este caso satchmo \ apps \ product. He copiado la aplicación en mi carpeta del proyecto Modificado mi setting.pyINSTALLED_APPS de 'product', a 'myproject.product',

Esto lleva ahora los cambios que he hecho a esta aplicación sólo para este proyecto y sale de la aplicación del producto original sin tocar y todavía puede leerse normalmente desde otros proyectos.

2

Normalmente, diría que lo mejor es que tenedor Satchmo y guardar una copia con los cambios.

Si está dispuesto a jugar con la ruta python, asegúrese de que el directorio de su aplicación aparezca antes que el otro directorio (predeterminado). De mis pruebas, si tiene dos aplicaciones/módulos con nombres idénticos, se usa el primero encontrado.

+0

heya. es un cambio específico del sitio, así que realmente no quiero bifurcar el satchmo y colocarlo en el camino porque no quiero que ningún otro proyecto lo use. – darren

+0

Luego la segunda opción permanece. Todo lo que tiene que hacer es modificar la ruta de Python (según las notas de Chris) y asegurarse de que su "producto" llegue a estar antes del producto estándar de satchmo (que) asumo que está instalado a través de pip/easy_setup. –

+0

Además (no puedo obtenerlo para hacer párrafos), puede aislar su sitio con virtualenv. Entonces, solo su sitio tendría acceso a la copia modificada de satchmo ... –

3

Cuando agrega una 'Aplicación Django' al INSTALLED_APPS en su archivo settings.py, le está diciendo a Django que existe un módulo python importable con ese nombre en su "ruta python". Puede ver su ruta de Python al ver el contenido de la lista almacenada en sys.path.

Siempre que Python (y en este caso Django) intenta importar un módulo comprueba cada uno de los directorios listados en sys.pathcon el fin, cuando encuentra un módulo de búsqueda el nombre dado que se detenga.

La solución a su problema, entonces es demasiado colocar su personalizado Django Apps, por ejemplo, el módulo de Satchmo product, en una ubicación en la ruta de Python que será verificado antes el "verdadero" Satchmo módulo product.

Porque no sé cómo se ha estructurado su directorio, básicamente estoy adivinando aquí, pero en su caso, parece que las aplicaciones Satchmo viven en algún lugar como /satchmo/apps/ y su proyecto en /my_custom_path/my_project/. En ese caso, es posible que desee agregar su módulo personalizado product al /my_custom_path/my_project/product/. Debido a que la ruta en la que se encuentra el archivo Django settings.py siempre se marca primero, eso significa que su módulo personalizado product se encontrará primero y se importará en lugar de Satchmo uno.

FYI: para comprobar y ver el orden en que su instalación Satchmo está comprobando los directorios de los módulos se ejecutan python manage.py shell y luego en la línea de hacer import sys; print sys.path.

+0

Hiya Chris. Pero, ¿qué sucede si no quiero que mis otras aplicaciones utilicen esta aplicación de productos personalizada? Todos seguirán importando este Producto primero, ya que se encuentra primero en la ruta. Quiero sobrescribir la aplicación solo para este sitio. – darren

+1

Quizás, si explica el diseño de la estructura de su directorio, pueda ayudarlo. A partir de ahora, no está claro cómo tienes tus aplicaciones, bibliotecas y proyectos establecidos. –

Cuestiones relacionadas