• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

HecKel

[django] Usar CSS nas templates, como?

5 mensagens neste tópico

Boas!

Estou (novamente) com um problema quanto a isto, queria ver se avançava com o meu projecto, mas sem ver o efeito final as coisas complicam um bocado...

Tenho a seguinte hierarquia de pastas:

hierarquia.png

Onde a pasta "lafora" é o projecto em si, enquanto que a pasta "laforapublic" será a localização dos templates de acesso público (tenho seguido o tutorial do django).

A questão é, tenho a seguinte linha no ficheiro "menu.html" na psta \laforapublic:

<link href="css/style.css" rel="stylesheet" type="text/css" media="screen" />

Este ficheiro menu.html é o ficheiro "base" das templates publicas, está criado da seguinte forma:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>{% block title %}{% endblock %}</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="css/style.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
    <div id="header">
        <h1>{% block subtitle %}{% endblock %}</h1>
    </div>
    <div id="menu">
        <ul>
            <li><a href="#">Menu 1</a></li>
            <li><a href="#">Menu 2</a></li>
            <li><a href="#">Menu 3</a></li>
            <li><a href="#">Menu 4</a></li>
            <li><a href="#">Menu 5</a></li>
        </ul>
    </div>
    {% block content %}{% endblock %}
</body>
</html>

No entanto o CSS não me aparece visivel, já meti a pasta css em todos os locais possíveis e imaginários mas nada :X

Ideias?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Depois de umas horitas de volta disto, cheguei à conclusão. Servir ficheiros estáticos no django é uma valente confusão. O melhor mesmo é, tal como eles recomendam, usar um servidor externo. Mas, e se não tivermos um à mão, ou se não nos apetecer instalar o apache só para ver como fica a nossa página?

A solução acabou por ser estupidamente simples :x

No meu settings.py tenho:

MEDIA_URL = '/media/'

MEDIA_ROOT = '/path/website/media/'

No meu urls.py:

from django.conf.urls.defaults import *
from django.conf import settings

urlpatterns = patterns('',
    # Example:
    # (r'^website/', include('website.foo.urls')),
    
    (r'^quext/$', 'website.quext.views.home'),
    (r'^quext/results/$', 'website.quext.views.results'),
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': '/home/joao/Desktop/QueXT/website/media'}),

Ora, podia, segundo a malta esperta do django, fazer isto também, para me facilitar a vida.

from django.conf.urls.defaults import *
from django.conf import settings

urlpatterns = patterns('',
    # Example:
    # (r'^website/', include('website.foo.urls')),
    
    (r'^quext/$', 'website.quext.views.home'),
    (r'^quext/results/$', 'website.quext.views.results'),
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT}),

Depois, trata-se de chamar no meu template o caminho certo:

<link rel="stylesheet" type="text/css" href="/site_media/css/initial.css" media="screen" />

Gil, tás com sorte que eu também estou de volta ao Django :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pá, deve haver mais algum detalhe que me falta...

ViewDoesNotExist: Could not import lafora.forum.views.django.views.static. Error was: No module named django.views.static

[18/Mar/2009 18:15:01] "GET /site_media/css/style.css HTTP/1.1" 500 1587

Continua a dar-me este erro... :|

Código que tenho:

settings.py

MEDIA_ROOT = 'C:/Documents and Settings/Gil Sousa/Os meus documentos/Projectos/laforapublic/static_media/'

MEDIA_URL = '/static_media/'

urls.py

from django.conf.urls.defaults import *
from django.conf import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('lafora.forum.views',

    # Uncomment the admin/doc line below and add 'django.contrib.admindocs' 
    # to INSTALLED_APPS to enable admin documentation:
    # (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
(r'^admin/(.*)', admin.site.root),
    (r'^forum/', include('lafora.forum.urls')),
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah, essa merece um facepalm :P

urlpatterns = patterns('lafora.forum.views', <----

'lafora.forum.views' é sempre acrescentado à localização das views. Daí, quando pões, 'django.views.static.serve', ele concatena as 2, obviamente não encontrando. Alternativas há 2, só te explico 1 que tou sem tempo :x

Tira o 'lafora.forums.views' do inicio da tupla e acrescenta-o a cada das tuas views. Outra coisa, site_media no urls.py e static_media no settings.py. Cuidado com isso :)

EDIT:

A segunda alternativa é, como só vais usar isso para development, e no servidor final tens um dominio a parte para a media, crias isto no urls.py:

if settings.DEBUG:
    urlpatterns += ((r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),)

Assim, qd tiras o DEBUG == True do settings.py, ele passa a não usar esta parte do código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, eu estava a ser bem burro :X

Resolvido :P

thanks :) (afinal de contas, acho que não vou desistir do django :x)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora