Yes, this should be done in main using using gluon/contenttype after creating the Response object. I would take a patch for this.
Massimo On Oct 7, 10:56 am, Jonathan Lundell <jlund...@pobox.com> wrote: > 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 <jlund...@pobox.com> 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 <jlund...@pobox.com> 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 web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---