Nastavitve v Djangu, da prepozna statične datoteke


Če pri kreiranju spletnih strani z Djangom uporabljamo razne statične datoteke, kot so slike, css, javascript datoteke, nam jih Django sam po sebi ne bo prepoznal. Potrebno je nekaj nastavitev. Ker je to postopek pravilne nastavitve kar pogost problem na internetu (poglejte samo število tem na stackoverflow-u, povezane z njim) in mi je vzelo kar nekaj časa, da sem našel odgovor v meni razumljivem načinu. V želji, da bo še komu prav prišlo, je postopek napisan spodaj (velja sicer le za razvoj, ne pa tudi za produkcijo).

  • Prepričajte se, da je v settings.py v INSTALLED_APPS nahaja django.contrib.staticfiles.
  • V settings.py določite STATIC_URL. To je pot, pod katero se bodo nahajale statične datoteke.
    [python]STATIC_URL = "/static/"[/python]
  • Prepričajte se, da so datoteke v pravih direktorijih. Privzeto bo staticfiles iskal datoteke v direktorijih static/, ki se nahaja v mapah nameščenih aplikacij (nameščena aplikacija je tista, ki je napisana pod INSTALLED_APPS), kot tudi v direktorijih, navedenih pod STATICFILES_DIRS (v primerih, da hranite statične datoteke v drugih direkotrijih – še posebno, če se ne tičejo posamezne aplikacije).
  • Naredite pogled (view) dostopen tako, da v urls.py na koncu dodate naslednji vrstici:
    [python]
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    urlpatterns += staticfiles_urlpatterns()
    [/python]
  • Prepričajte, da je v settings.py spremenljivka DEBUG nastavljena na TRUE.
  • Ko v views.py kličete render_to_response, jo kličite z RequestContext Primer:
    [python]from django.template import RequestContext
    # …

    def some_view(request):
    # …
    return render_to_response(‘my_template.html’, {
    "foo" : "bar", # other context
    }, context_instance = RequestContext(request))[/python]

Ko te opravite, lahko statične datoteke kličete s pomočjo značke {{ STATIC_URL }}. Primer za povezanje CSS datoteke v HTML dokument:

[html]<link rel="stylesheet" href="{{ STATIC_URL }}style.css">[/html]

Vir: stackoverflow