Stručně:
# urls.py, viz https://gist.github.com/tricoder42/5754777
# Development
from django.conf import settings
 
if settings.DEBUG:
    from django.conf.urls.static import static
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    media = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns = media + staticfiles_urlpatterns() + urlpatterns

# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, „static"),
STATIC_URL = ‘/static/’
STATICFILES_DIRS = (
    ‘/home/screemy/PycharmProjects/standa/static/‘,  # predpokladam, ze tento 
adresar neni BASE_DIR + ’static’
)

Dlouze:

Samozřejmě je žádoucí, aby se vývojové settings co nejméně lišili od 
produkčních. Na druhou stranu je dobré si spoustu věcí pro vývoj zjednodušit, 
abys zbytečně neztrácel čas. Otestovat produkční nastavení můžeš potom např. 
pomocí staging/release verze.


Produkční server:
Používá STATIC_URL a STATIC_ROOT. Když zavoláš manage.py collectstatic, tak se 
prohledají všechny appky a STATICFILES_DIRS a všechny soubory z těch adresářů 
se nahrají do STATIC_ROOT. STATIC_URL pak už jen používáš v šablonách a musíš 
si nastavit HTTP server tak, aby na STATIC_URL servíroval soubory z 
STATIC_ROOT. Tohle může řešit i Django, ale většinou se to nedoporučuje.


Vývojové nastavení:
Aby jsi nemusel spouštět collectstatic pokaždé když upravíš CSS nebo 
javascript, tak si nastavíš Django, aby ti servíroval i statiky — do urls.py 
přidáš řádek urlspatterns += staticfiles_urlpatterns(). Tato url bude fungovat 
pouze pokud je DEBUG = True. Funguje to podobně, jako collectstatic — pokaždé, 
když přijde požadavek na STATIC_URL, Django prohledá všechny appky a 
STATICFILES_DIRS a vratí soubor, který najde.

Na druhou stranu, pokud do urls.py přidáš ten tvůj řádek: 
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT), tak si moc 
nepomůžeš. Pořád musís spouštět collectstatic, aby se nakopírovali soubory do 
STATIC_ROOT. Metoda ``static`` vlastně dělá to samé, co by měl dělat tvůj HTTP 
server — mapuje url začínající STATIC_URL na soubory v STATIC_ROOT. Používá se 
to i při vývoji, ale pouze pro MEDIA_URL a MEDIA_ROOT (media jsou soubory 
nahrané uživateli, zatímco static jsou soubory dodávané přímo s tvým kódem)


Tvoje nastavení:
Přidávát STATIC_ROOT do STATICFILES_DIRS nedává moc smysl a Django ti to ani 
nedovolí (proto jsi STATIC_ROOT nejspíš zakomentoval, jinak to háže error). 
STATICFILES_DIRS jsou všechny dodatečné adresáře, ze kterých chceš tahat 
soubory. Tj. v každé appce můžeš mít složku static, ale pokud budeš chtět mít 
jednu globální (nezávislou na appce), tak si vytvoříš libovolný adresář a 
přidáš ho do STATICFILES_DIRS.

A ještě jednou: STATIC_ROOT je cílový adresář, kam se posbírají všechny 
statické soubory pro tvůj projekt.


Tom



> 2. 1. 2015 v 17:23, Jakub Jiřička <[email protected]>:
> 
> Samozdrejme urls.py mam 
> + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
> 
> Dne pátek, 2. ledna 2015 17:20:17 UTC+1 Jakub Jiřička napsal(a):
> Tak jsem to asi vyřešil, avšak nevím jak :-)
> 
> cast settings.py
> # Static files (CSS, JavaScript, Images)
> # https://docs.djangoproject.com/en/1.6/howto/static-files/ 
> <https://docs.djangoproject.com/en/1.6/howto/static-files/>
> #STATIC_ROOT = os.path.join(BASE_DIR, 'static')
> 
> TEMPLATE_DIRS = (
>                  os.path.join(BASE_DIR, 'templates'),
> )
> 
> 
> STATIC_URL = '/static/'
> 
> STATICFILES_DIRS = (
>     os.path.join(BASE_DIR, "static"),
>     '/home/screemy/PycharmProjects/standa/static/',
> )
> 
> a urls.py mám takto:
> from django.conf.urls import patterns, include, url
> from django.conf import settings
> from django.contrib import admin
> from django.conf.urls.static import static
> 
> admin.autodiscover()
> 
> urlpatterns = patterns('',
>     url(r'^$', 'standa.views.home', name='home'),
> 
>     url(r'^admin/', include(admin.site.urls)),
> 
> )
> 
> 
> if settings.DEBUG:
>     import debug_toolbar
>     urlpatterns += patterns('',
>         url(r'^__debug__/', include(debug_toolbar.urls)),
>     )
> 
> a jak admin, tak front funguje ...
> 
> 
> Dne pátek, 2. ledna 2015 17:10:23 UTC+1 Jakub Jiřička napsal(a):
> Ano defaultni nastaveni jsem nechal (ani nevim kde jej menit)
> 
> jenze i kdyz provedenu python manage.py collectstatic tak mě to nejde ... jak 
> bych ted mohl dostat vse zpatky abch vyvijel tak jak se ma a nelamal produkci 
> vs devel???
> 
> v adresari "templates" mam base.html a home.html
> v adresari "static" mam css, js k sablone
> 
> v base.html odkazji takto:
> 
> {% load staticfiles %}
> <link href="{% static "stylesheets/bootstrap.css" %}" rel="stylesheet">
> <link href="/static/stylesheets/responsive.css" rel="stylesheet">
> 
> coz mě vyhodi:
> Page not found (404)
> 
> Request Method:       GET
> Request URL:  http://127.0.0.1:8000/static/stylesheets/bootstrap.css 
> <http://127.0.0.1:8000/static/stylesheets/bootstrap.css>
> 'stylesheets/bootstrap.css' could not be found
> 
> You're seeing this error because you have DEBUG = True in your Django 
> settings file. Change that to False, and Django will display a standard 404 
> page.
> 
> 
> 
> Dne pátek, 2. ledna 2015 16:55:05 UTC+1 Tomáš Ehrlich napsal(a):
> Oprava:
> V předchozím emailu myslím STATIC_ROOT místo STATIC_URL…
> 
> 2. 1. 2015 v 16:54, Tomáš Ehrlich <[email protected] <>>:
> 
> Ještě si oprav urls.py,
> přidej si tam urlpatterns += staticfiles_urlpatterns() místo static(…) (viz. 
> https://docs.djangoproject.com/en/1.7/ref/contrib/staticfiles/#django.contrib.staticfiles.urls.staticfiles_urlpatterns
>  
> <https://docs.djangoproject.com/en/1.7/ref/contrib/staticfiles/#django.contrib.staticfiles.urls.staticfiles_urlpatterns>)
> 
> Teď jak to máš nastavený, tak to hledá statické soubory v adresáři 
> STATIC_URL. Tam se dostanou příkazem man a používá se to spíš na produkčním 
> serveru.
> Během vývoje je jednodužší nastavit url pomocí staticfiles_urlpatterns() a 
> potom se na adresář STATIC_URL vůbec nešahá. Všechny soubory se načítají 
> přímo z appek, popřípadě z STATICFILES_DIRS
> 
> Předpokládám defaultní nastavení STATICFILES_LOADERS (filesystem a per-app 
> loader). Pokud jsi to měnil, může to být jinak.
> 
> 
> Tom
> 
> 2. 1. 2015 v 16:44, Jakub Jiřička <[email protected] <>>:
> 
> To jsem již zkoušel, odkazuje to správně ...
> 
> /home/screemy/PycharmProjects/standa/static
> 
> Dne pátek, 2. ledna 2015 16:39:09 UTC+1 Vítek Pliska napsal(a):
> O to ze ti to ted serviruje admin staticy se ti stara appka, kterou mas v 
> INSTALLED_APPS django.contrib.staticfiles
> 
> Prover si ze skutecne ukazujes na spravny adresar s tvymi staticy - 
> print(STATIC_ROOT)
> 
> Pripadne se spis podivej na docku django.contrib.staticfiles a uprav urls.py 
> dle ni.
> 
> Vitek
> 
> 
> 2. 1. 2015 v 16:31, Jakub Jiřička <[email protected] <>>:
> 
> Dobrý den,
> 
> to jsem jelen, ted administrace funguje, avsak zase nejde css frontendu ...
> 
> <table class="meta <>">
>       <tr>
>         <th>Request Method:</th>
>         <td>GET</td>
>       </tr>
>       <tr>
>         <th>Request URL:</th>
>       <td>http://127.0.0.1:8000/static/stylesheets/bootstrap.css 
> <http://127.0.0.1:8000/static/stylesheets/bootstrap.css></td>
>       </tr>
>     </table>
> 
> Přitom přímo v adresaři to opravdu je ... na vině musí být tedy to lomnítko a 
> někdě něco špatně ... bohužel já nevím kde a co ...
> 
> Dne pátek, 2. ledna 2015 16:18:32 UTC+1 Vítek Pliska napsal(a):
> Ahoj,
> 
> asi ti jen chybi pocatecni lomitko ve STATIC_URL
> 
> Hezky den, Vitek
> 
> 
> 2. 1. 2015 v 16:14, Jakub Jiřička <[email protected] <>>:
> 
> Dobrý den,
> 
> s Djangem teprve začínám (cca 5 dní) a hned mám problém ohledně chybějcích 
> stylů pro administraci...
> 
> Věc se má takto, když si zobrazím zdrojový kod administrace tak mám soubory 
> nalinkované takto:
>   <link rel="stylesheet <>" type="text/css <>" href=""/>
>   <link rel="stylesheet <>" type="text/css <>" 
> href="static/suit/bootstrap/css/bootstrap.min.css <>" media="all <>"/>
>   <link rel="stylesheet <>" type="text/css <>" href="static/suit/css/suit.css 
> <>" media="all <>">
>   
>   
> 
>   
>   <script type="text/javascript <>">window.__admin_media_prefix__ = 
> "static/admin/";</script>
>   <script src="static/suit/js/jquery-1.8.3.min.js <>"></script>
>   <script type="text/javascript <>">var Suit = { $: $.noConflict() }; if (!$) 
> $ = Suit.$; </script>
>   <script src="static/suit/bootstrap/js/bootstrap.min.js <>"></script>
>   
>   <style type="text/css <>">.required:after { content: '*'; margin: 0 0 0 
> 5px; position: absolute; color: #ccc;}</style>
> 
> 
> Ale když si chci jednotlivý soubory otevřít, tak to hodí error, že 
> neexistují, ale v odkazu vidím přidaný admin:
> <h1>Page not found <span>(404)</span></h1>
>     <table class="meta <>">
>       <tr>
>         <th>Request Method:</th>
>         <td>GET</td>
>       </tr>
>       <tr>
>         <th>Request URL:</th>
>       
> <td>http://127.0.0.1:8000/admin/static/suit/bootstrap/css/bootstrap.min.css 
> <http://127.0.0.1:8000/admin/static/suit/bootstrap/css/bootstrap.min.css></td>
>       </tr>
>     </table>
> 
> A já nemohu přijít na to, co dělám špatně ... proč mě ty styly nejdou ...
> 
> Kdyby bylo třeba, přidávám urls.py:
> from django.conf.urls import patterns, include, url
> from django.conf import settings
> from django.contrib import admin
> from django.conf.urls.static import static
> 
> admin.autodiscover()
> 
> urlpatterns = patterns('',
>     url(r'^$', 'standa.views.home', name='home'),
> 
>     url(r'^admin/', include(admin.site.urls
> ...
> 
> -- 
> -- 
> E-mailová skupina [email protected]
> Správa: http://groups.google.cz/group/django-cs 
> <http://groups.google.cz/group/django-cs>
> 
> --- 
> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny 
> „django-cs“ ve Skupinách Google.
> Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete 
> e-mail na adresu [email protected] 
> <mailto:[email protected]>.
> Další možnosti najdete na https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
-- 
E-mailová skupina [email protected]
Správa: http://groups.google.cz/group/django-cs

--- 
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs 
ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete 
e-mail na adresu [email protected].
Další možnosti najdete na adrese https://groups.google.com/d/optout.

Reply via email to