2011-10-15 15 views
9

Estoy tratando de usar el proyecto Django nonrel para el motor de la aplicación google. Configuré el proyecto de prueba como se describe en here. Agregué una nueva carpeta al proyecto llamada "estática" para mis archivos estáticos. Y para el archivo app.yaml agregué las líneas;Cómo usar archivos estáticos con django nonrel

- url: /static 
static_dir: static 

No puedo encontrar mis archivos estáticos. ¿Tengo que hacer una configuración adicional?

Thx de antemano.

+0

¿Por casualidad está poniendo sus plantillas allí? –

Respuesta

10

app.yaml no tienen nada que ver con Django, pero sí configura el front-end de App Engine. La respuesta depende de si desea servir archivos estáticos con Django o el front-end (que es, bueno, más barato y más rápido).

Si sólo "añadido" a su - url: /static mapeo para el final, antes de moverlo el comodín /.*. Como todas las asignaciones procesadas de arriba a abajo, gana el primer mapeo coincidente.

4

Bueno, acabo de descubrirlo. Simplemente use la línea static_dir antes de la main.py. Entonces la aplicación .yaml debería verse así;

application: test 
version: 1 
runtime: python 
api_version: 1 

builtins: 
- remote_api: on 

inbound_services: 
- warmup 

handlers: 
- url: /_ah/queue/deferred 
    script: djangoappengine/deferred/handler.py 
    login: admin 

- url: /_ah/stats/.* 
    script: djangoappengine/appstats/ui.py 

- url: /media/admin 
    static_dir: django/contrib/admin/media 
    expiration: '0' 

- url: /static 
    static_dir: static 

- url: /.* 
    script: djangoappengine/main/main.py 
13

medida que la gente ya se ha señalado, se debería poner su directiva static_dir antes /.* patrón

Sin embargo, ese no es el único que debe conocer.

Al poner esta directiva en app.yaml, hace que AppEngine webserver (ya sea su servidor de desarrollo o producción) maneje la ruta /static, y necesita que todos los archivos estáticos estén dentro del directorio estático. Esto significa que usted tendrá que ejecutar python manage.py collectstatic cada vez que cambie nada en sus archivos estáticos (especialmente si tiene aplicaciones/uso con archivos estáticos - como, por ejemplo, admin o django-tinymce) sólo para probar estos cambios en el servidor local

Entonces, ¿cómo evitar eso? Por defecto, staticfiles proporciona a los ayudantes para que sirvan estos archivos en el servidor de desarrollo sin ejecutar recopilaciones cada vez, el problema es el conflicto de nombre de dominio descrito en el párrafo anterior: Django no puede capturar solicitudes a su ruta de archivos estáticos, ya que son manejadas por el servidor de aplicaciones. Se puede resolver mediante el uso de diferentes caminos en el desarrollo y la producción de servidor:

# in settings.py 
if DEBUG: 
    STATIC_URL = '/devstatic/' 
else: 
    STATIC_URL = '/static/' 

(djangoappengine fija de depuración en True en el servidor de desarrollo). Puede dejar ADMIN_MEDIA_PREFIX = '/static/admin/', pero recuerde que debe ejecutar collectstatic al menos una vez antes de usar administrador

Por supuesto, recuerde usar {{ STATIC_URL }}path/to.css en las plantillas en lugar de /static/path/to.css

Ah, y supongo que a distinguir el directorio de archivos estáticos originales se trabajar en y el directorio donde se deben recopilar los archivos estáticos. Yo uso este en mi settings.py:

STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'sitestatic') 
STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), 'static'), 
) 

Esto significa: poner sus fiels estáticos en static dir (y dentro de tus aplicaciones static directorios), collectstatic los recoge en sitestatic dir.app.yaml apropiada directiva es

- url: /static 
    static_dir: sitestatic 

Por último, puede configurar app.yaml ignorar static y media directorios al cargar la aplicación, ya que todos los archivos estáticos serán recogidas dentro y sirven de sitestatic. Sin embargo, debe configurar esto solo durante la carga (de lo contrario, estos archivos no estarán disponibles en el servidor de depuración)

+0

También es posible que necesite agregar los patrones estáticos de helper urlpatterns y emplear la etiqueta de plantilla "estática" para las plantillas procesadas sin RequestContext. Consulte [docs] (https://docs.djangoproject.com/en/dev/howto/static- archivos /). Además, asegúrese de que las rutas a los archivos estáticos servidos por staticfiles dev helper no coincidan con ninguna entrada static_dir o static_files en app.yaml. GAE distingue archivos "estáticos" y de "script", y el servidor de aplicaciones dev bloqueará a Django para que no sirva dinámicamente a los archivos que cree que son estáticos, para ser coherentes con la producción, donde está bloqueada por razones de seguridad. (GAE SDK 1.7.5) – jgiles

+1

no se olvide de configurar la función estática de ayuda en urls.py https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files- en desarrollo – taelimoh

Cuestiones relacionadas