Problemas ao carregar o CSS

942 views
Skip to first unread message

Lucas Rezende

unread,
May 16, 2011, 12:02:00 PM5/16/11
to Django Brasil
Pessoal,

Eu não estou conseguindo fazer com que a página carregue as
propriedades especificadas no meu CSS.

Quando coloco o arquivo .css na mesma pasta do meu template e o abro
via Finder, ela carrega! Quando utilizo via MEDIA_URL e abro através
do "localhost:8000" ela não carrega.

Será que alguém poderia me ajudar?

O código do HTML, CSS e Settings.py estão no link: http:pastebin.com/
WSNw6zUc

Desde já obrigado pela ajuda! (Y)

Natasha Paiva

unread,
May 16, 2011, 12:29:32 PM5/16/11
to django...@googlegroups.com
Lucas,

como está seu esquema de diretórios?
E como está sua views?


--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>



--
Att,
Natasha do Nascimento Paiva


Linux user: #
524303

LNCC - Laboratório Nacional de Computação Científica
MCT - Ministério da Ciência e Tecnologia


http://twitter.com/paivaNatasha

Felipe Zorzo

unread,
May 16, 2011, 12:54:43 PM5/16/11
to django...@googlegroups.com
Em 16 de maio de 2011 13:02, Lucas Rezende <lucas...@gmail.com> escreveu:
--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>

Lucas, seus templates estão configurados para carregar a partir da pasta 'templates' do seu projeto, mas o o MEDIA_URL está configurado para pegar da pasta 'media' (veja o TEMPLATE_DIRS e MEDIA_ROOT no settings.py).

Como você colocou o CSS na mesma pasta que o template, o Django não vai conseguir encontrá-lo. O CSS precisa estar na pasta que foi configurada no MEDIA_ROOT.

(De qualquer forma, no Django 1.3 é uma boa ideia usar o django.contrib.staticfiles[1] pra isso)

--
Felipe Bernardo Zorzo (@felipez)

Lucas Rezende

unread,
May 16, 2011, 12:57:43 PM5/16/11
to Django Brasil
Oi Natasha,

Minha estrutura está da seguinte maneira:

Multiplikação (root)
> settings.py (dentro de Multiplikação)
> urls.py (dentro de Multiplikação)
> (dir)media (dentro de Multiplikação)
---> stylelogin.css (dentro de media

-> (dir)login (app) (dentro de Multiplikação)
---> (dir)templates
-----> login.html (dentro de templates
---> views.py (dentro de login)

=========================================================================
Meu arquivo views.py, dentro da app "login", está da seguinte maneira:
-------------------------------------------------------------------------

from django.http import HttpResponse
from django.shortcuts import *
from django.template import *

def HomeLogin (request):
return render_to_response('login.html', RequestContext(request))

-------------------------------------------------------------------------

Não sei se ficou muito claro, mas foi o melhor que consegui! :)

Obrigado!

On May 16, 1:29 pm, Natasha Paiva <nattynpa...@gmail.com> wrote:
> Lucas,
>
> como está seu esquema de diretórios?
> E como está sua views?
>
> Em 16 de maio de 2011 13:02, Lucas Rezende <lucasgr...@gmail.com> escreveu:
>
>
>
>
>
>
>
>
>
> > Pessoal,
>
> > Eu não estou conseguindo fazer com que a página carregue as
> > propriedades especificadas no meu CSS.
>
> > Quando coloco o arquivo .css na mesma pasta do meu template e o abro
> > via Finder, ela carrega! Quando utilizo via MEDIA_URL e abro através
> > do "localhost:8000" ela não carrega.
>
> > Será que alguém poderia me ajudar?
>
> > O código do HTML, CSS e Settings.py estão no link: http:pastebin.com/
> > WSNw6zUc <http://pastebin.com/%0AWSNw6zUc>

Lucas Rezende

unread,
May 16, 2011, 1:00:35 PM5/16/11
to Django Brasil
Felipe,

O meu arquivo CSS está na pasta "media", um nível acima do diretório
da app "login", no root do meu projeto.

Será que coloquei no lugar errado, ou configurei o path errado?

Obrigado!

Natasha Paiva

unread,
May 16, 2011, 1:11:13 PM5/16/11
to django...@googlegroups.com
Lucas,

na minha sincera opinião, colocaria os templates dentro da pasta media, algo assim:

projeto
    media
        templates (diretório)
            index.html
            login.html
        css
            stylelogin.css

No settings configuraria o TEMPLATE_DIRS = (
             MEDIA_ROOT + '/templates/'
             (os.path.join(PROJECT_DIR, 'templates')),
)

E na chamada do css: {{ MEDIA_URL }}css/stylelogin.css

Espero que tenha me entendido.

Lucas Rezende

unread,
May 16, 2011, 1:18:59 PM5/16/11
to Django Brasil
Natasha, eu entendi o que falou, apesar de ainda estar tentando
entender o que foi alterado no settings.py.
Achei que ficou mais organizado mesmo :)

Só uma dúvida (de principiante)... eu não preciso ter um diretório de
templates para cada app criada?

Se eu criar um diretório "media" na raiz, e criar um diretório
"templates" dentro, como faço para cada app saber qual é o template
que deve utilizar na hora de realizar a renderização?

Obrigado pela ajuda! =)

On May 16, 2:11 pm, Natasha Paiva <nattynpa...@gmail.com> wrote:
> Lucas,
>
> na minha sincera opinião, colocaria os templates dentro da pasta media, algo
> assim:
>
> projeto
>     media
>         templates (diretório)
>             index.html
>             login.html
>         css
>             stylelogin.css
>
> No settings configuraria o TEMPLATE_DIRS = (
>              MEDIA_ROOT + '/templates/'
>              (os.path.join(PROJECT_DIR, 'templates')),
> )
>
> E na chamada do css: {{ MEDIA_URL }}css/stylelogin.css
>
> Espero que tenha me entendido.
>

Natasha Paiva

unread,
May 16, 2011, 1:24:29 PM5/16/11
to django...@googlegroups.com
Lucas,
você pode sim ter um diretório para cada app, fica mais organizado.

Não sei se entendi bem sua pergunta, mas vamos lá.
Na sua view, você indica qual o template deve apontar, usando seu exemplo,
ele vai apontar para o login.html que está localizado dentro do diretório templates.

Se você quer criar um diretório para cada app em templates/, ao invés de você só indicar
login.html, seria app/login.html.

Deu para compreender?

Robson

unread,
May 16, 2011, 1:31:52 PM5/16/11
to django...@googlegroups.com
Em 16 de maio de 2011 14:18, Lucas Rezende <lucas...@gmail.com> escreveu:
> Natasha, eu entendi o que falou, apesar de ainda estar tentando
> entender o que foi alterado no settings.py.
> Achei que ficou mais organizado mesmo :)
>
> Só uma dúvida (de principiante)... eu não preciso ter um diretório de
> templates para cada app criada?
>
> Se eu criar um diretório "media" na raiz, e criar um diretório
> "templates" dentro, como faço para cada app saber qual é o template
> que deve utilizar na hora de realizar a renderização?
>
> Obrigado pela ajuda! =)

Olá pessoal,

Só lembrando que colocar os templates dentro da pasta média tornará o
"source" do seu template acessível pela web.

Basta o usuário acessar a url (/media/templates/) e ele poderá
enxergar um pouco da estrutura do seu site (template tags, etc).

abs!

Lucas Rezende

unread,
May 16, 2011, 1:42:23 PM5/16/11
to Django Brasil
Natasha,

No meu caso o diretório templates fica dentro do diretório da minha
app login.

Multiplikação (root)
media (diretório)
stylelogin.css

login (app)
templates (dir)
login.html

No meu settings.py eu passava /media/ no meu MEDIA_URL e cadastrei o
TEMPLATE_DIRS como mostado abaixo:

TEMPLATE_DIRS = (
(os.path.join(PROJECT_DIR, 'templates')),
)

Na minha view eu passava somente: return
render_to_response("login.html", RequestContext(request))

Eu acho que não entendi muito bem então essa questão do que é para ser
configurado no settings.py

(Desculpa a ignorância, é que sou bem novato nesse mundo Python/
Django)

Obrigado!


On May 16, 2:24 pm, Natasha Paiva <nattynpa...@gmail.com> wrote:
> Lucas,
> você pode sim ter um diretório para cada app, fica mais organizado.
>
> Não sei se entendi bem sua pergunta, mas vamos lá.
> Na sua view, você indica qual o template deve apontar, usando seu exemplo,
> ele vai apontar para o login.html que está localizado dentro do diretório
> templates.
>
> Se você quer criar um diretório para cada app em templates/, ao invés de
> você só indicar
> login.html, seria app/login.html.
>
> Deu para compreender?
>

Natasha Paiva

unread,
May 16, 2011, 1:49:23 PM5/16/11
to django...@googlegroups.com
Se você quer que essa estrutura continue assim,
deve fazer o que o Felipe disse acima, a configuração está errada para o que você quer fazer.

Vitor Hugo Campos

unread,
May 16, 2011, 1:52:30 PM5/16/11
to django...@googlegroups.com
eu acho que a melhor deixar pasta só com seus apps, uma pasta com apps externas, uma pros templates, uma pros arquivos estatico do site (css, js , imagens etc) e outra com os arquivos dinamicos.
ai dentro da pasta templates vc cria uma pasta para cada app sua.

Em 16 de maio de 2011 14:42, Lucas Rezende <lucas...@gmail.com> escreveu:



--
Vitor Hugo Campos

Lucas Rezende

unread,
May 16, 2011, 2:03:04 PM5/16/11
to Django Brasil
Mas diferente do que ele disse, meu arquivo CSS não está no diretório
"templates". Ele está no diretório "media", no mesmo nível no
diretório da app "login".

Quando eu entro "localhost:8000" ele me retorna a página. Funcoina. O
único problema é que ele não carrega as propriedades que estão no
"stylelogin.css"

On May 16, 2:49 pm, Natasha Paiva <nattynpa...@gmail.com> wrote:
> Se você quer que essa estrutura continue assim,
> deve fazer o que o Felipe disse acima, a configuração está errada para o que
> você quer fazer.
>

Felipe Zorzo

unread,
May 16, 2011, 2:28:16 PM5/16/11
to django...@googlegroups.com
Em 16 de maio de 2011 15:03, Lucas Rezende <lucas...@gmail.com> escreveu:
Mas diferente do que ele disse, meu arquivo CSS não está no diretório
"templates". Ele está no diretório "media", no mesmo nível no
diretório da app "login".

Quando eu entro "localhost:8000" ele me retorna a página. Funcoina. O
único problema é que ele não carrega as propriedades que estão no
"stylelogin.css"

Lucas, seu MEDIA_ROOT está apontando pra uma pasta media no nível do projeto. Como você tem uma pasta na app, não vai funcionar mesmo.

Sugiro que você utilizada o django.contrib.staticfiles, como falei antes. o MEDIA_ROOT não é capaz de atender essa situação que você está mostrando (arquivos estáticos por apps).

No seu caso, e considerando o servidor de desenvolvimento, bastaria renomear a pasta 'media' para 'static', e usar STATIC_URL invés de MEDIA_URL.

Veja o exemplo dessa resposta que dei numa thread esses dias atrás, acho que vai te ajudar: https://groups.google.com/d/msg/django-brasil/wgpp6xy6lxY/AbQMfFVDi64J

--
Felipe Bernardo Zorzo (@felipez)

Rodrigo Chacon

unread,
May 16, 2011, 2:29:40 PM5/16/11
to django...@googlegroups.com
Lucas, acho que seu problema está em como você configura o PROJECT_DIR. Remova as ' (aspas simples) de volta do __file__ e adicionei a função abspath, assim:

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))

Depois que fizer isso, tente acessar diretamente seu CSS pelo navegador.

Quanto a organização do projeto, o Django não entra no seu caminho, mas aconselho a usar algo como:

- meu_projeto
-- settings.py

-- app1
--- models.py
--- views.py

-- media (arquivos de upload do usuario)

-- static (arquivos estaticos)
--- css/
---- estilo.css
--- js/
---- javascript.js
--- images/
---- imagem.jpg

-- templates/
--- app1/
---- template.html


Uma referência que gosto (mas *acho* que está um pouco desatualizada): http://ericholscher.com/projects/django-conventions/

-- Rodrigo Chacon




Em 16 de maio de 2011 15:03, Lucas Rezende <lucas...@gmail.com> escreveu:

Felipe Zorzo

unread,
May 16, 2011, 2:34:30 PM5/16/11
to django...@googlegroups.com
Em 16 de maio de 2011 15:28, Felipe Zorzo <felipe....@gmail.com> escreveu:
Em 16 de maio de 2011 15:03, Lucas Rezende <lucas...@gmail.com> escreveu:

Mas diferente do que ele disse, meu arquivo CSS não está no diretório
"templates". Ele está no diretório "media", no mesmo nível no
diretório da app "login".

Quando eu entro "localhost:8000" ele me retorna a página. Funcoina. O
único problema é que ele não carrega as propriedades que estão no
"stylelogin.css"

Lucas, seu MEDIA_ROOT está apontando pra uma pasta media no nível do projeto. Como você tem uma pasta na app, não vai funcionar mesmo.


Opa, fiz um pouco de confusão nessa parte. Ignore, por favor.

Miltinho

unread,
May 16, 2011, 4:18:54 PM5/16/11
to Django Brasil
Lucas

O melhor pra você é manter os templates dentro da pasta da aplicação
porque quando você precisar usar uma aplicação em outro projeto terá
dificuldades em localizar cada arquivo referente a esta aplicação.

projeto
aplicacao1
templates
nome1.html
nome2.html

As aplicações no Django devem ser independentes das outras ao ponto de
poder reutilizá-las em outros projetos. Os CSS's devem ficar dentro da
pasta media porque a estilização deve ser referente ao projeto e não à
aplicação.

projeto
media
css
img
js
aplicacao1
aplicacao2

Lucas Rezende

unread,
May 16, 2011, 7:14:22 PM5/16/11
to Django Brasil
Eu já tentei de tudo... não rola...

Mesmo se eu colocar o stylelogin.css na mesma pasta do template e
chamar o css no html usando o caminho absoluto, o login.html só
reconhece o css se eu abri-lo pelo Finder (explorer do Mac). Se eu
rodar o runserver e ir em localhost:8000 ele me mostra a página sem os
"efeitos" css.

Efeitos = body com background preto só para fazer teste.

Alguém teria mais alguma sugestão? =(

Robson

unread,
May 16, 2011, 9:16:46 PM5/16/11
to django...@googlegroups.com
Olá Lucas,

Vc tbm está servindo os arquivos estáticos pelo django? Como está seu urls.py?
Acessando a url http://localhost:8000/media/, o que acontece?

abs!
Robson

Lucas Rezende

unread,
May 17, 2011, 12:31:32 AM5/17/11
to Django Brasil
Eu não entendo ainda muito bem sobre essa questão de arquivos
estáticos. Comecei a ler o material hoje sob recomendação do Felipe.

Quando acesso http://localhost:8000/media/ recebo o erro 404: Page not
found.

O meu arquivo urls.py está assim:

urlpatterns = patterns('',
url(r'^$', 'login.views.HomeLogin'),
)

Meu arquivo views.py da app login está assim:

from django.http import HttpResponse
from django.shortcuts import *
from django.template import *


def HomeLogin (request):
return render_to_response('login.html', RequestContext(request))

A minha estrutura de diretórios é:

Multiplikacao
login
templates
login.html

__init__.py
models.py
tests.py
views.py

media
stylelogin.css

__init__.py
database.db
manage.py
settings.py
urls.py

Meu arquivo login.html está:

<html>
<head>
<title>MULTIPLIKAÇÃO //</title>
<link href="{{ MEDIA_URL }}stylelogin.css" rel="stylesheet"
type="text/css" />
</head>

<body>

<div id="geral">
E-mail: <input type="text" id="usuarioLogin"
name="usuario" value="E-mail de cadastro">
<br />
Senha: <input type="password" id="senhaLogin"
name="senha" value="Senha">
<br />
<input type="button" id="entrarBtn" name="entrar"
value="Entrar">
</div>


</body>
</html>

Meu settings.py está assim (como é grande coloquei no pastebin.com):
http://pastebin.com/ZAaS1a7H

Isso é tudo que tenho =(

Desde já agradeço à todos pela ajuda que estão me dando!


On May 16, 10:16 pm, Robson <r...@linux.com> wrote:
> Olá Lucas,
>
> Vc tbm está servindo os arquivos estáticos pelo django? Como está seu urls.py?
> Acessando a urlhttp://localhost:8000/media/, o que acontece?
>
> abs!
> Robson

Robson

unread,
May 17, 2011, 12:42:27 AM5/17/11
to django...@googlegroups.com
Em 17 de maio de 2011 01:31, Lucas Rezende <lucas...@gmail.com> escreveu:
>
> Quando acesso http://localhost:8000/media/ recebo o erro 404: Page not
> found.
>
> O meu arquivo urls.py está assim:
>
> urlpatterns = patterns('',
>    url(r'^$', 'login.views.HomeLogin'),
> )
>

Olá Lucas,

Basicamente, o django não foi feito p/ servir arquivos estáticos, mas em ambiente de desenvolvimento dá pra usar o django.views.static.serve [1]. Basta alterar seu urls.py p/ ficar assim:

from django.conf.urls.defaults import patterns, include, url
from django.conf import settings


urlpatterns = patterns('',
    url(r'^$', 'login.views.HomeLogin'),
     (r'^media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT}),
)

Só não use isso em produção :)

Ah, no livro do Marinho Brandão tem um capítulo específico sobre isso [2].

abs!
Robson

Lucas Rezende

unread,
May 17, 2011, 9:01:27 AM5/17/11
to Django Brasil
Entendi. Eu já queria deixar a coisa mais ou menos encaminhada para
quando for colocar em produção.

Do jeito que eu fiz, não deveria funcionar (claro, exceto por não
funcionar ^^)?

Eu já tentei bater o código com uma outro exemplo que vi e
aparentemente está certo. Será que eu estou passando errado o caminho
MEDIA_URL ou MEDIA_ROOT?

Eu tentei colocar o endereço http://localhost:8000/media/stylelogin.css
e mesmo assim me retornou Page not found. Se estivesse certo ele não
teria que mostrar o conteúdo do arquivo css no meu browser?



On May 17, 1:42 am, Robson <r...@linux.com> wrote:
> Em 17 de maio de 2011 01:31, Lucas Rezende <lucasgr...@gmail.com> escreveu:
>
>
>
> > Quando acessohttp://localhost:8000/media/recebo o erro 404: Page not
> > found.
>
> > O meu arquivo urls.py está assim:
>
> > urlpatterns = patterns('',
> >    url(r'^$', 'login.views.HomeLogin'),
> > )
>
> Olá Lucas,
>
> Basicamente, o django não foi feito p/ servir arquivos estáticos, mas em
> ambiente de desenvolvimento dá pra usar o django.views.static.serve
> [1]. Basta alterar seu urls.py p/ ficar assim:
>
> from django.conf.urls.defaults import patterns, include, url
> *from django.conf import settings*
>
> urlpatterns = patterns('',
>     url(r'^$', 'login.views.HomeLogin'),
> *     (r'^media/(?P<path>.*)$', 'django.views.static.serve',
>             {'document_root': settings.MEDIA_ROOT}),
> *)

Lucas Rezende

unread,
May 17, 2011, 9:54:50 AM5/17/11
to Django Brasil
O parâmetro abaixo deve estar mesmo entre ''?

import os
PROJECT_DIR=os.path.dirname('__file__')

By the way... sem querer fugir da questão inicial, pois é o que
realmente está me tiranto o sono (literalmente), alguém poderia me
explicar brevemente o que é esse tal de __file__ ?

Obrigado!

On May 17, 10:01 am, Lucas Rezende <lucasgr...@gmail.com> wrote:
> Entendi. Eu já queria deixar a coisa mais ou menos encaminhada para
> quando for colocar em produção.
>
> Do jeito que eu fiz, não deveria funcionar (claro, exceto por não
> funcionar ^^)?
>
> Eu já tentei bater o código com uma outro exemplo que vi e
> aparentemente está certo. Será que eu estou passando errado o caminho
> MEDIA_URL ou MEDIA_ROOT?
>
> Eu tentei colocar o endereçohttp://localhost:8000/media/stylelogin.css
> e mesmo assim me retornou Page not found. Se estivesse certo ele não
> teria que mostrar o conteúdo do arquivo css no meu browser?
>
> On May 17, 1:42 am, Robson <r...@linux.com> wrote:
>
>
>
>
>
>
>
> > Em 17 de maio de 2011 01:31, Lucas Rezende <lucasgr...@gmail.com> escreveu:
>
> > > Quando acessohttp://localhost:8000/media/receboo erro 404: Page not

Felipe Zorzo

unread,
May 17, 2011, 10:23:01 AM5/17/11
to django...@googlegroups.com
Em 17 de maio de 2011 10:01, Lucas Rezende <lucas...@gmail.com> escreveu:
Entendi. Eu já queria deixar a coisa mais ou menos encaminhada para
quando for colocar em produção.

Do jeito que eu fiz, não deveria funcionar (claro, exceto por não
funcionar ^^)?
[...] 

Bem lembrado, tem esse detalhe do urlpattern pra funcionar. Lucas, é que Django não serve os arquivos de media automaticamente, nem no servidor de desenvolvimento. 

Entende-se, considerando o Django 1.3, que o MEDIA_ROOT é o lugar onde vão ficar os arquivos que o usuário enviou, não os arquivos do seu projeto. Por isso que para separar os arquivos do seu projeto dos arquivos recebidos por upload foi incluída a app staticfiles, que comentei num email anterior.

Fiz aqui um projeto com esses arquivos que você enviou, e após a sugestão do Robson e funcionou.

Sobre o __file__, basicamente é uma variável mágica que contém o caminho do módulo. Precisa estar fora das aspas mesmo. Ah, como o Rodrigo Chacon já falou, normalmente se usa: os.path.dirname(os.path.abspath(__file__)). Isso normaliza os caminhos corretamente, é algo como "retorne o diretório a partir do caminho absoluto do arquivo atual".

A propósito, fiz um teste aqui usando media e staticfiles: http://goo.gl/44pi4

Lucas Rezende

unread,
May 17, 2011, 3:56:32 PM5/17/11
to Django Brasil
Então o __file__ é uma variável de ambiente do Django?


On May 17, 11:23 am, Felipe Zorzo <felipe.b.zo...@gmail.com> wrote:
> Felipe Bernardo Zorzo (@felipez <http://twitter.com/felipez>)http://www.felipezorzo.com.br

Felipe Zorzo

unread,
May 17, 2011, 4:08:23 PM5/17/11
to django...@googlegroups.com
Em 17 de maio de 2011 16:56, Lucas Rezende <lucas...@gmail.com> escreveu:
Então o __file__ é uma variável de ambiente do Django?


Não, é uma variável do Python mesmo. Não é específico do Django. :) 

Se você criar um arquivo .py com o conteúdo "print __file__", e executar ele pelo interpretador do Python pelo shell/prompt de comando, verá que ele vai imprimir na tela o nome do arquivo que você criou.

Lucas Rezende

unread,
May 17, 2011, 4:15:01 PM5/17/11
to Django Brasil
Hum... então quando uso o os.path.dirname(os.path.abspath(__file__))
no arquivo settings.py ele pega o diretório onde o settings.py está,
no caso, a raiz do meu projeto?



On May 17, 5:08 pm, Felipe Zorzo <felipe.b.zo...@gmail.com> wrote:
> Em 17 de maio de 2011 16:56, Lucas Rezende <lucasgr...@gmail.com> escreveu:
>
> > Então o __file__ é uma variável de ambiente do Django?
>
> Não, é uma variável do Python mesmo. Não é específico do Django. :)
>
> Se você criar um arquivo .py com o conteúdo "print __file__", e executar ele
> pelo interpretador do Python pelo shell/prompt de comando, verá que ele vai
> imprimir na tela o nome do arquivo que você criou.
>
> --

Felipe Zorzo

unread,
May 17, 2011, 4:32:22 PM5/17/11
to django...@googlegroups.com


Em 17 de maio de 2011 17:15, Lucas Rezende <lucas...@gmail.com> escreveu:
Hum... então quando uso o os.path.dirname(os.path.abspath(__file__))
no arquivo settings.py ele pega o diretório onde o settings.py está,
no caso, a raiz do meu projeto?

Exatamente. Essa é a mágica :P

Lucas Rezende

unread,
May 17, 2011, 4:44:33 PM5/17/11
to Django Brasil
Você acabou de me entregar a pílula vermelha! Hehehe...

Pergunta: Eu atribui os.path.dirname(os.path.abspath(__file__)) à
variável DIRETORIO_ROOT (exemplo)...

Eu poderia usar os.path.join(DIRETORIO_URL, 'media') dentro do meu
MEDIA_URL assim como fiz no TEMPLATES_URL ?

Se eu puder usar, será que não é esse meu problema?

(Não é má vontade de testar antes de perguntar. É pq no momento não
posso abrir o note para fazer, então então aproveito para tirar as
dúvidas e tentar achar uma solução com mais embasamento)

Obrigado pela força! =)

On May 17, 5:32 pm, Felipe Zorzo <felipe.b.zo...@gmail.com> wrote:
> Em 17 de maio de 2011 17:15, Lucas Rezende <lucasgr...@gmail.com> escreveu:
>
> > Hum... então quando uso o os.path.dirname(os.path.abspath(__file__))
> > no arquivo settings.py ele pega o diretório onde o settings.py está,
> > no caso, a raiz do meu projeto?
>
> Exatamente. Essa é a mágica :P
>
> --

Thiago Paulino

unread,
May 17, 2011, 6:01:03 PM5/17/11
to django...@googlegroups.com
E aí, pessoal, td blz?

Assim como o Lucas, eu também sou novo em Python/Django e estou tendo o mesmo problema. Estava seguindo a discussão e tentando resolver aqui, mas depois de muitas tentativas frustradas, resolvi postar aqui pra pedir ajuda também. =)

Eu tentei fazer o que o Lucas disse no último post, criei uma variável no settings.py chamada ESTILO_URL com o que eu penso ser o caminho completo para o arquivo .css mas também não rolou.
Ficou assim: ESTILO_URL = os.path.dirname(os.path.abspath(__file__)) + '/public/templates/estilo/'
A estrutura do meu projeto está da seguinte forma:
2011-05-17_184507.png
A página está carregando, mas sem o CSS (nesse caso a página "default.html" que herda de "base.html").

Alguém dá uma luz aí? Estou emperrado nos estudos por causa disso. :(
Valeu.


--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>



--
Thiago P.
Graduando em Sistemas p/ Internet - IFPB
Pós-graduando em Desenv. p/ Dispositivos móveis - FatecJP
oxenteexception.wordpress.com
Twitter: @thiagopbr

2011-05-17_184507.png

Robson

unread,
May 17, 2011, 6:32:44 PM5/17/11
to django...@googlegroups.com
Em 17 de maio de 2011 19:01, Thiago Paulino <thiagop...@gmail.com> escreveu:
>
> E aí, pessoal, td blz?
>
> Assim como o Lucas, eu também sou novo em Python/Django e estou tendo o mesmo problema. Estava seguindo a discussão e tentando resolver aqui, mas depois de muitas tentativas frustradas, resolvi postar aqui pra pedir ajuda também. =)
>
> Eu tentei fazer o que o Lucas disse no último post, criei uma variável no settings.py chamada ESTILO_URL com o que eu penso ser o caminho completo para o arquivo .css mas também não rolou.
> Ficou assim: ESTILO_URL = os.path.dirname(os.path.abspath(__file__)) + '/public/templates/estilo/'

Olá Thiago,

Como está seu urls.py?  Dá uma olhada no último email que mandei nessa thread..  Se mesmo assim não funcionar, verifique se seu MEDIA_ROOT e MEDIA_URL estão certos. Pela estrutura que vc mandou, deveria ser algo assim:

# settings.py
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'public', 'templates')
MEDIA_URL = '/media/' # só um exemplo, poderia ser qq coisa aqui

e no seu template:
<link href="{{ MEDIA_URL }}estilo/estilo.css" rel="stylesheet" type="text/css"/>

Com isso, basicamente o template irá renderizar o {{ MEDIA_URL }} com o valor em seu settings.py ("/media/"), e o caminho completo onde o navegador irá buscar o css é: http://.... /media/estilo/estilo.css

Como seu MEDIA_ROOT está apontando para a pasta  "public/templates/" em seu projeto, o django irá buscar o arquivo em: 
/caminho/para/seu/projeto/public/templates/estilo/estilo.css

Mas pra isso funcionar vc precisa configurar o django p/ servir arquivos estáticos, informando a url no urls.py:

from django.conf import settings

urlpatterns = patterns('',
 
    #.... suas urls

     (r'^media/(?P<path>.*)$', 'django.views.static.serve', 
            {'document_root': settings.MEDIA_ROOT}),
)

Desta forma a url /media/  irá servir os arquivos estáticos da sua pasta MEDIA_ROOT :)

Ah, outro detalhe: ao criar uma varíavel no settings.py, ela não estará automaticamente disponível em seus templates. O MEDIA_URL só está disponível pois existe um middleware que faz isso (insere essa variável no context).

abs!
Robson

Thiago Paulino

unread,
May 17, 2011, 7:10:04 PM5/17/11
to django...@googlegroups.com
Robson, eu consegui. o/
Eu segui a explicação do livro do Marinho que você citou e funcionou, mas... Da forma que você explicou (exatamente) não funcionou, não sei porque. Eu acabei "mesclando" a sua solução com a do Marinho e deu certo.
Mas me tira uma dúvida: você falou (e no livro também fala) que essa configuração não é a mais adequada para um ambiente em produção. Por que? Qual seria a configuração correta em um ambiente de produção? E porque não configurar agora da forma como irei por em produção? Me desculpe por tantas perguntas. xD

E pense num muído pra colocar uma folha de estilo. hehe

Ah, e só pra reforçar, minhas configurações ficaram assim:

no settings.py...
MEDIA_ROOT = os.path.join(PROJECT_ROOT_PATH, 'public','templates')
MEDIA_URL = '/media/'
-------------------------
urls.py
(...)
url(r'^media/(.*)$','django.views.static.serve',{'document_root':settings.MEDIA_ROOT}),
(...)
-------------------------
página HTML...
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}estilo/estilo.css"/>
-------------------------
views.py

from django.template import RequestContext

def pagina_inicial(request):
    return render_to_response('default.html', locals(), context_instance=RequestContext(request))
-------------------------

É isso (seguindo a mesma estrutura de diretórios que eu postei antes).
Obrigado pela ajuda.
abraço

--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>

Robson

unread,
May 17, 2011, 7:37:21 PM5/17/11
to django...@googlegroups.com
Em 17 de maio de 2011 20:10, Thiago Paulino <thiagop...@gmail.com> escreveu:
>
> Robson, eu consegui. o/
> Eu segui a explicação do livro do Marinho que você citou e funcionou, mas... Da forma que você explicou (exatamente) não funcionou, não sei porque. Eu acabei "mesclando" a sua solução com a do Marinho e deu certo.

Opa, bacana!

> Mas me tira uma dúvida: você falou (e no livro também fala) que essa configuração não é a mais adequada para um ambiente em produção. Por que? Qual seria a configuração correta em um ambiente de produção? E porque não configurar agora da forma como irei por em produção? Me desculpe por tantas perguntas. xD
>

Então, o static.serve é lento e inseguro. O django não foi feito pra
servir arquivos estáticos, e um servidor como o nginx ou lighttpd faz
isso de forma muito melhor.

Por exemplo, o nginx responde mais de 10 mil requisições por segundo,
e *acredito* (nunca testei) que o django não responda mais de 50 ou
100 pra arquivos estáticos (estou sendo otimista hehe).

Não sei te explicar pq ele é inseguro, mas se a própria documentação
diz isso, eu acredito hehe E só por ser lento eu já descarto o uso
dele em produção :)

Ah, no livro do Marinho tem uma forma interessante de manter o django
servindo arquivos estáticos apenas no ambiente de desenvolvimento, sem
precisar ficar alterando o código antes do deploy:

http://www.aprendendodjango.com/ajustando-as-coisas-para-colocar-no-ar/

abs!
Robson

Thiago Paulino

unread,
May 17, 2011, 10:59:40 PM5/17/11
to django...@googlegroups.com
Ahh, blz então.
Valeu Robson (y)


abs!
Robson

--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>

Lucas Rezende

unread,
May 18, 2011, 10:03:59 AM5/18/11
to Django Brasil
Eu ainda não consegui fazer a parada funfar! =(

Eu deletei o meu projeto e comecei do ZERO seguindo extamente um
tutorial que peguei.

Se eu passar o MEDIA_URL como context para o meu template, ao ver o
código ele subtitui por "/media/stylelogin.css". Até ai beleza!

O problema é que ainda sim ele não deixa o background preto! HAUAHUAH

Eu estou usando o Virtual Env. Será que o caminho absoluto que ele
pega é a partir da raiz do meu ambiente criado pelo Virtual Env?!

Se eu configurar o MEDIA_URL no meu arquivo settings.py eu não preciso
passar o MEDIA_URL como context para o meu template, certo?


Esse meu problema está rendendo... hehe... deve ser problema de
Peopleware =)

Obrigado à todos!


On May 17, 11:59 pm, Thiago Paulino <thiagopauli...@gmail.com> wrote:
> Ahh, blz então.
> Valeu Robson (y)
>
> Em 17 de maio de 2011 20:37, Robson <r...@linux.com> escreveu:
>
>
>
>
>
>
>
>
>
> > Em 17 de maio de 2011 20:10, Thiago Paulino <thiagopauli...@gmail.com>
> *Thiago P.
> Graduando em Sistemas p/ Internet - IFPB
> Pós-graduando em Desenv. p/ Dispositivos móveis - FatecJP
> oxenteexception.wordpress.com <http://oxenteexception.blogspot.com>
> **Twitter: @thiagopbr*

Felipe Zorzo

unread,
May 18, 2011, 10:13:06 AM5/18/11
to django...@googlegroups.com
Em 18 de maio de 2011 11:03, Lucas Rezende <lucas...@gmail.com> escreveu:
Eu ainda não consegui fazer a parada funfar! =(

Eu deletei o meu projeto e comecei do ZERO seguindo extamente um
tutorial que peguei.

Se eu passar o MEDIA_URL como context para o meu template, ao ver o
código ele subtitui por "/media/stylelogin.css". Até ai beleza!

O problema é que ainda sim ele não deixa o background preto! HAUAHUAH

Eu estou usando o Virtual Env. Será que o caminho absoluto que ele
pega é a partir da raiz do meu ambiente criado pelo Virtual Env?!

Se eu configurar o MEDIA_URL no meu arquivo settings.py eu não preciso
passar o MEDIA_URL como context para o meu template, certo?


Esse meu problema está rendendo... hehe... deve ser problema de
Peopleware =)

Obrigado à todos!

Lucas, tente rodar esses projetos: http://goo.gl/44pi4 

Lucas Rezende

unread,
May 18, 2011, 10:23:32 AM5/18/11
to Django Brasil
Felipe, o link está me direcionando para a minha própria página do
Google Docs. =/

On May 18, 11:13 am, Felipe Zorzo <felipe.b.zo...@gmail.com> wrote:

Leonardo Alves dos Santos

unread,
Jul 27, 2011, 6:41:34 PM7/27/11
to django...@googlegroups.com
Pessoal eu apresentei o mesmo problema a forma como o Thiago Paulino apresentou funcionou mas não entendi exatamente o que locals(), context_instance fez exatamente alguem poderia me explicar?
--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>



--
Leonardo Alves dos Santos

__________________________________________
Bacharelando em ciências da computação pela UFCG
<b>Membro não bolsista do PET computação - UFCG</b></br>
santos.leonardoalves -  Perfil do Google


Elyézer Mendes Rezende

unread,
Jul 27, 2011, 7:44:48 PM7/27/11
to django...@googlegroups.com
locals() retorna a lista de variáveis locais ao escopo, no caso a
função da view.

context_instance vc passa a instancia de contexto que será utilizada
para rendenizar o template. Ao utilizar o RequestContext, ele preenche
o request com os request context processors definidos no settings.

Até mais

2011/7/27 Leonardo Alves dos Santos <santos.leo...@gmail.com>:

--
Elyézer Mendes Rezende
http://elyezer.com

Leonardo Alves dos Santos

unread,
Jul 27, 2011, 7:48:31 PM7/27/11
to django...@googlegroups.com
ah entendi vlw :)

Alex Figueira

unread,
Jul 28, 2011, 9:12:52 AM7/28/11
to django...@googlegroups.com
Lucas,

tive esse problema e fiz tudo que todos disseram acima, isso irá melhorar muito o seu projeto, mas talvez, como era o meu caso o probleme era só na forma como eu renderizada o html tente como abaixo e veja a coisa funcionar:

[...]
template = loader.get_template(''seu_template_archive.html')
context = Context({ 'query': query, 'resultados': lista_paginada })
response = template.render(context)
return render_to_response('seu_template_archive.html', context, context_instance=RequestContext(request))
[.....]

estas outrs formas a seguir não funcionaram muito bem:

    #return render_to_response(seu_template_archive.html', context_instance=context, mimetype="text/html")
    #return HttpResponse(response, mimetype='text/html')
    #return HttpResponse(response)

Boa sorte

Alex


Em 18 de maio de 2011 11:23, Lucas Rezende <lucas...@gmail.com> escreveu:
--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>



--
Alex Figueira
http://twitter.com/marcioalexfig

Alex Figueira

unread,
Jul 28, 2011, 9:26:16 AM7/28/11
to django...@googlegroups.com
Que aliás o "Thiago Paulino" fez de forma semelhante, o caminho é esse.

Reply all
Reply to author
Forward
0 new messages