On Oct 7, 2009, at 8:44 AM, Julio wrote:

>
> This is good, specially if on your website you implement some sort of
> "skinning" allowing the users to dynamically switch "layouts" using
> the same css file, thanks for sharing this.

You're welcome.

I think it's a generally useful capability, and I hope that there's a  
more elegant way of incorporating it into web2py. As I was saying  
somewhere else, a generic.css file doesn't really work (unless you're  
generating all your CSS content in controllers). At the very least,  
perhaps the logic (where?) that creates the default html headers could  
recognize that it's got a .css file and create css headers instead.

>
> On Oct 7, 8:19 am, Jonathan Lundell <[email protected]> wrote:
>> On Oct 6, 2009, at 2:54 PM, Eric Vicenti wrote:
>>
>>
>>
>>> Thanks, mdi and Jonathan. I will borrow your __cssheaders()  
>>> function,
>>> if you don't mind.
>>
>> I should have commented it a bit first, but it's not all that subtle.
>>
>> By the time the controller runs, the response has been set up as a
>> standard html page. So we delete cookies and the default caching, and
>> use Expires caching (an hour as shown) so that, in theory anyway (I
>> haven't tested this against browsers yet) the performance should be
>> fairly close to static.
>>
>> When I'm actually working on the CSS, I reduce the Expires timeout to
>> 3 seconds (or whatever you like) so that my changes appear promptly.
>>
>> Here's a slightly cleaner version:
>>
>> def __cssheaders():
>>      '''
>>      edit default response headers for CSS
>>      serve text/css with no cookies, limited caching
>>      '''
>>      response.cookies = Storage()  # no cookies
>>      for header in ('Last-Modified', 'Expires', 'Pragma'):
>>         if header in response.headers: del response.headers[header]
>>      response.headers['Content-Type']='text/css'
>>      response.headers['Cache-Control'] = 'max-age=3600, must- 
>> revalidate'
>>      response.headers['Cache-Control'] = 'max-age=3, must-revalidate'
>>
>>
>>
>>> Is there any way to have some code in the css.py controller which  
>>> will
>>> automatically define functions for all my css files in /views/css/ ?
>>> All it would need to do is run the __cssheaders() function and  
>>> return
>>> dict(), but it feels unnecessary to maintain a list of functions  
>>> when
>>> there are files.
>>
>>> -Eric
>>
>>> On Oct 6, 2:29 pm, Jonathan Lundell <[email protected]> wrote:
>>>> On Oct 6, 2009, at 1:35 PM, mdipierro wrote:
>>
>>>>> It is good practice to put in the CSS only relative urls to other
>>>>> static files. That is not a problem with web2py.
>>
>>>>> If you need to include in the CSS urls generated by {{=URL(....)}}
>>>>> then you should promote the css from a static file to a dynamic
>>>>> page:
>>>>> 1) make a controller for it
>>>>> 2) make a view ending in .css
>>>>> 3) call the action from the layout ending in .css
>>>>> 4) in the .css view use absolute paths to include images
>>
>>>> When I tried serving dynamic CSS (I wanted to dynamically control
>>>> colors, fonts, etc), I had to do some work to get the result served
>>>> as
>>>> text/css (which is necessary). I ended up hacking that (and some
>>>> other
>>>> header stuff, like caching) in the controller, but I suppose it  
>>>> could
>>>> happen in the view.
>>
>>>> I notice that there's no generic.css.
>>
>>>> I have a controller, css.py, that looks like this:
>>
>>>> import time
>>>> from gluon.storage import Storage
>>
>>>> def __cssheaders():
>>>>      '''
>>>>      edit default response headers for CSS
>>>>      serve text/css with limited caching
>>>>      '''
>>>>      response.cookies = Storage()
>>>>      response.headers['Content-Type']='text/css'
>>>>      response.headers['Cache-Control'] = 'max-age=3600, must-
>>>> revalidate'
>>>>      if 'Last-Modified' in response.headers: del response.headers
>>>> ['Last-Modified']
>>>>      if 'Expires' in response.headers: del response.headers
>>>> ['Expires']
>>>>      if 'Pragma' in response.headers: del response.headers 
>>>> ['Pragma']
>>
>>>> def xxx():
>>>>      '''
>>>>      app/css/xxx.css
>>>>      set fonts and colors to be substituted via xxx.css view
>>>>      '''
>>>>      __cssheaders()
>>>>      font_serif = 'cambria, georgia, "times new roman", serif'
>>>>      font_sans = 'corbel, "Helvetica Neue", Helvetica, Arial, sans-
>>>> serif'
>>>>      return dict(dark_color="#8e1650", second_color="#635e54",
>>>> light_color="#e9e7de",
>>>>          accent_color="#edab05", flash_color="white",
>>>> flash_background="#8e1650",
>>>>          body_background_color="#e8e8e8",
>>>> content_background_color="white",
>>>>          font_body=font_serif,
>>>>          font_logo=font_sans,
>>>>          font_head=font_sans,)
>>
>>
> >



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to