Domanda

Ho visto diversi post per questo problema ma non ho trovato la mia soluzione.

Sto cercando di servire file statici nel mio ambiente di sviluppo Django 1.3.

Ecco le mie impostazioni

...
STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
  '/static/',
)
...

I miei URL.py

urlpatterns = patterns('',
...
  url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root', settings.STATIC_ROOT}
  ),
...
);

Mio /home/glide/Documenti/django/cbox/static/ la directory è come

css
  main.css
javascript
image

Ricevo un errore 404 quando provo ad accedere http://127.0.0.1:8000/static/css/main.css.

Devo specificare i modelli per CSS, Javascript e immagini individualmente?

È stato utile?

Soluzione

sono confuso RADICE_STATICA E STATICFILES_DIRS

In realtà non ne capivo davvero l'utilità RADICE_STATICA.Pensavo che fosse la directory in cui devo mettere i miei file comuni.Questa directory viene utilizzata per la produzione, questa è la directory in cui verranno inseriti (raccolti) i file statici collectorstatic.

STATICFILES_DIRS è quello di cui ho bisogno.

Dato che mi trovo in un ambiente di sviluppo, la soluzione per me è non utilizzare RADICE_STATICA (o per specificare un altro percorso) e impostare la directory dei file comuni in STATICFILES_DIRS:

#STATIC_ROOT = (os.path.join(SITE_ROOT, 'static_files/'))
import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
STATICFILES_DIRS = (
  os.path.join(SITE_ROOT, 'static/'),
)

Inoltre, non dimenticartelo from django.conf import settings

Altri suggerimenti

Servire i file statici possono essere raggiunti in diversi modi; Ecco i miei appunti da sé:

    .
  • Aggiungi una directory static/my_app/ a my_app (vedi la nota sulla spina di Nomi sotto)
  • Definisci una nuova directory di livello superiore e aggiungilo a StaticFiles_DIRS in Impostazioni.py (Nota che The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting)

    Preferisco il primo modo, e una configurazione che è vicina alla strada definito in La documentazione , quindi per servire il file admin-custom.css per sovrascrivere un paio di stili di amministrazione, ho una configurazione come SO:

    .
    ├── my_app/
    │   ├── static/
    │   │   └── my_app/
    │   │       └── admin-custom.css
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── static/
    ├── templates/
    │   └── admin/
    │       └── base.html
    └── manage.py
    
    .
    # settings.py
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    STATIC_URL = '/static/'
    
    .

    Questo viene quindi utilizzato nel modello come:

    # /templates/admin/base.html
    {% extends "admin/base.html" %}
    {% load static %}
    
    {% block extrahead %}
        <link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
    {% endblock %}
    
    .

    .

    Durante lo sviluppo, se si utilizza Django.contrib.staticfiles [ED: installato per impostazione predefinita], questo verrà eseguito automaticamente da RunServer quando Debug è impostato su True [...]

    https://docs.djangoproject.com/en/1.10/Howto/static-files/

    Quando si distribuisce, eseguo collectstatic e servono file statici con NginX.


    .

    I documenti che hanno cancellato tutta la confusione per me:

    .

    statico_root

    Il percorso assoluto della directory in cui Collectstatic raccoglierà file statici per la distribuzione.

    ... è non un posto per memorizzare in modo permanente i file statici. Dovresti farlo nelle directory che saranno trovate dai cercatori di StaticFiles, che per impostazione predefinita, sono le sotto-directory 'statiche /' app e tutte le directory che includi in StaticFiles_DIRS).

    https://docs.djangoproject.com/en/1.10/ref/settings/ # statico-root


    .
    .

    File staticoSpacing

    Ora potremmo essere in grado di allontanarsi con il metterlo direttamente i nostri file statici in my_app / statico / (piuttosto che creare un'altra sottodirectory my_app), ma in realtà sarebbe una cattiva idea. Django utilizzerà il primo file statico che trova il cui nome corrisponde, e se avessi un file statico con lo stesso nome in un'applicazione diversa, Django non sarebbe in grado di distinguere tra loro. Dobbiamo essere in grado di puntare django a destra, e il modo più semplice per garantire che questo sia nampacinandoli. Cioè, mettendo quei file statici all'interno di un'altra directory denominata per l'applicazione stessa.

    https://docs.djangoproject.com/en/1.10/Howto/static-files/


    .
    .

    staticoFiles_dirs

    Il tuo progetto probabilmente avrà anche beni statici che non sono legati a una particolare app. Oltre a utilizzare una directory statica / all'interno delle tue app, è possibile definire un elenco di directory (StaticFiles_DIRS) nel file delle impostazioni in cui Django cercherà anche file statici.

    https://docs.djangoproject.com/en/1.10/Howto/static-files/

Potrebbero esserci solo due cose nel file settings.py quelle che fanno fungere dai file statici.

1) STATIC_URL = '/static/'

2)

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)
.

E i file statici dovrebbero mentire nella directory statica che si trova nella stessa directory del file delle impostazioni del progetto.

Anche se i tuoi file statici non si caricano, allora è possibile che sia stato tenuto

DEBUG = False
.

cambilo su true (solo rigorosamente per lo sviluppo).Nella produzione basta cambiare STATICFILES_DIRS in qualsiasi percorso in cui risiede i file statici.

Se il tuo URL statico è corretto ma ancora:

.

non trovato: /static/csss/main.css

Forse il tuo problema WSGI.

➡ config wsgi serve entrambi lo sviluppo env e produzione env

==========================project/project/wsgi.py==========================

import os
from django.conf import settings
from django.contrib.staticfiles.handlers import StaticFilesHandler
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
if settings.DEBUG:
    application = StaticFilesHandler(get_wsgi_application())
else:
    application = get_wsgi_application()
.

Un altro errore non può avere la tua app elencata nell'elenco INSTALLED_APPS come:

INSTALLED_APPS = [
    # ...
    'your_app',
]
.

Senza averlo in entrato, puoi affrontare problemi come non rilevare i tuoi file statici, fondamentalmente tutti i file che coinvolgono la tua app.Anche se può essere corretto come suggerito nella risposta corretta utilizzando:

STATICFILES_DIRS = (adding/path/of/your/app)
.

può essere uno degli errori e dovrebbe essere rivisto in caso di errore.

{'document_root', settings.STATIC_ROOT} deve essere {'document_root': settings.STATIC_ROOT}

o avrai un errore come dictionary update sequence element #0 has length 6; 2 is required

Ho trovato che ho spostato la mia impostazione DEBUG nelle mie impostazioni locali per essere sovrascritta da un valore False predefinito.Semplicemente cerca di assicurarsi che l'impostazione di debug sia effettivamente falsa se si sta sviluppando con DEBUG e runserver.

    .
  1. Puoi rimuovere la riga STATIC_ROOT
  2. o puoi creare un'altra cartella static in directory diversa.Per supporre che la directory sia: project\static Ora Aggiorna:

    STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'project/static/') ] STATIC_ROOT = os.path.join(BASE_DIR, 'static')

    Qualunque sia il punto principale è STATICFILES_DIRS e STATIC_ROOT non deve contenere la stessa directory.

    So che è passato molto tempo ma spero che i nuovi amici possano ottenere aiuto da esso

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top