Keep in mind, this method will execute a separate database select for every 
row in the table in order to retrieve the status highlight_color. Also, the 
CSS rule will not color the background of the entire cell, just the status 
text (plus padding).

Anthony

On Monday, May 12, 2014 7:33:06 PM UTC-4, Michael Beller wrote:
>
> I wouldn't recommend using field names, that would not be very flexible. 
>  Here's an option:
>
> db.define.table('status',
>     Field('name'),
>     Field('highlight_color'))
>
> db.define.table('inventory',
>     Field('item'),
>     Field('status', 'reference status'))
>
> Then just populate the status table with your list of statuses and its 
> associated highlight color.  Then in your controller and view, create a 
> query for the status colors and a corresponding loop in your view to build 
> the list of status styles.  Something like this may work ...
>
> {{for x in status_list:}}
>     {{=x.name.replace(' ','_')}} {background-color: {{=x.highlight_color
> }}; padding:5px;}
> {{pass}}
>
> to produce this ...
>
> .Not.Started {background-color: yellow; padding:5px;}
> .In.Progress {background-color: green; color:white; padding:5px;}
> .Completed {background-color: red; color:white; padding:5px;}
> .Deferred {background-color: blue; color:white; padding:5px;}
>
>
>
> On Monday, May 12, 2014 1:44:29 PM UTC-4, LoveWeb2py wrote:
>>
>> Thank you for your reply, Michael & Anthony.
>>
>> Michael: I really like this idea. What would my model look like?
>>
>> I setup db.define_table('status',
>>      Field('id','integer'),
>>      Field('normal','string'),
>>      Field('warning','string'),
>>      migrate=False)
>>
>> Would I have to populate the fields or can we just use the field names... 
>> I want to make it to where the referenced table allows me to choose a color 
>> for the selected column of interest (or cell). 
>> So if my column looked like this:
>> Item | status
>> server | 1
>>
>> The server cell would be green.Could I do this?
>>
>>
>>
>> On Saturday, May 10, 2014 1:26:51 PM UTC-4, Michael Beller wrote:
>>>
>>> I learned this method from one of Massimo's lecture video's:
>>>
>>> At the top of your model file:
>>> # function to allow models to set status style
>>> def show_status(status,row=None):
>>>     return SPAN(status.f_name.replace(' ','_'),_class=status.f_name) 
>>> ifstatus 
>>> else status
>>>
>>> After your table definition (could be in your controller but I set the 
>>> represent after my table definition in my model file so it is consistent 
>>> across all locations in my app):
>>> db.table_name.status_field_name.represent = show_status
>>>
>>> Note that in my models db.table_name.status_field_name is a reference 
>>> field to a status table (so you select from a drop down list to select a 
>>> status) and the name of the status in the status table is f_name.
>>>
>>> In your CSS (I have one CSS static file for my application for 
>>> application specific styles that I include in layout.html):
>>> /* Status styles */
>>> .Not.Started {background-color: yellow; padding:5px;}
>>> .In.Progress {background-color: green; color:white; padding:5px;}
>>> .Completed {background-color: red; color:white; padding:5px;}
>>> .Deferred {background-color: blue; color:white; padding:5px;}
>>>
>>> I think this is nicer than embedding an if statement with 
>>> hardcoded styles in your code.
>>>
>>>
>>> On Friday, May 9, 2014 4:22:45 PM UTC-4, LoveWeb2py wrote:
>>>>
>>>> Hello,
>>>>
>>>> I have a spreadsheet of items and I want to track their inventory based 
>>>> on color (similar to an excel spreadsheet).
>>>>
>>>> I have two columns for example: Item, Item_Status
>>>> The item could be a desk, chair, etc... and for status I have 1 2 or 3.
>>>>
>>>> If the status is 1 I would like to make the cell color of the desk 
>>>> green, 2 yellow, 3 red.
>>>>
>>>> so far I have 
>>>>
>>>> def represent_colored(value):
>>>>    if value == 1:
>>>>    return SPAN(value,_style="background-color:green',)
>>>> elif value == 2:
>>>>    return SPAN(value,_style="background-color:yellow',)
>>>> elif value == 3:
>>>>    return SPAN(value,_style="background-color:red',)
>>>> else:
>>>>    return SPAN(value,_style="background-color:orange',)
>>>>
>>>> def inventory():
>>>>    db.inventory.items.represent = lambda value, row: 
>>>> represent_colored(value)
>>>>    grid=SQLFORM.grid(db.inventory, paginate=20)
>>>>    return dict(grid=grid)
>>>>
>>>> This works so far, but it only changes the background color of the text 
>>>> in the status column and I want to change the column of the actual item. I 
>>>> also would like to change the entire cell <td> instead of just the 
>>>> background behind the text.
>>>> Also, I plan on branching the inventory out to multiple columns and I 
>>>> have two questions:
>>>>
>>>> 1) How could I change the entire cell color?
>>>> 2) Is making multiple "status" columns the most efficient and pythonic 
>>>> way to accomplish this.
>>>>
>>>> You guys are the best!
>>>>
>>>>
>>>> Wil
>>>>    
>>>>
>>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to