This happens because the url has arguments.

please try with:

{{extend 'layout.html'}}
{{
if not request.args:
 w2p_grid_tbl = grid.element('table')
 if w2p_grid_tbl:
 original_export_menu = grid.element('div.w2p_export_menu')
 export_menu_links = original_export_menu.elements('a')
 export_menu_items = []
 for link in export_menu_links:
 item = LI(link)
 export_menu_items.append(item)
 pass
 new_export_menu = DIV(
                      A( T('Exports'),
                         SPAN(_class='caret'),
                         _href='#',
                         _class='btn dropdown-toggle',
                         **{'_data-toggle':"dropdown"}
                        ),
                      UL(*export_menu_items,
                         _class='dropdown-menu'
                        ),
                    _class='w2p_export_menu btn-group'
                    )
 export_menu = grid.element('div.w2p_export_menu',replace=new_export_menu)
 pass
pass
}}


{{=grid}}

Of course if the page with the grid has arguments in url you have to change 
the first condition and check the acceptable cases.
 
 

Il giorno giovedì 25 ottobre 2012 16:20:45 UTC+2, Omi Chiba ha scritto:
>
> I posted on this on my 
> blog<http://ochiba77.blogspot.com/2012/10/web2py-grid-with-export-dropdown.html?showComment=1351174654911#c5334545878916593563>
>  and 
> someone pointed that it will get ticket when clicking View button. Do you 
> know how to fix?
>
> Problem looks like here.
> export_menu_links = original_export_menu.elements('a')
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.
>
> Traceback (most recent call last):
>   File "C:\web2py\gluon\restricted.py", line 209, in restricted
>     exec ccode in environment
>   File "C:\web2py\applications\grid\views\default/index.html", line 82, in 
> <module>
> AttributeError: 'NoneType' object has no attribute 'elements'
>
>
>
> 73.
> 74.
> 75.
> 76.
> 77.
> 78.
> 79.
> 80.
> 81.
> 82.
>
> 83.
> 84.
> 85.
> 86.
> 87.
> 88.
> 89.
> 90.
> 91.
> 92.
>
>     pass
> response.write('\n\n        <div class="', escape=False)
> response.write(middle_columns)
> response.write('">\n            ', escape=False)
> response.write('\n            ', escape=False)
> response.write('\r\n', escape=False)
> w2p_grid_tbl = grid.element('table')
> if w2p_grid_tbl:
>     original_export_menu = grid.element('div.w2p_export_menu')
>     export_menu_links = original_export_menu.elements('a')
>
>     export_menu_items = []
>     for link in export_menu_links:
>         item = LI(link)
>         export_menu_items.append(item)
>         pass
>     new_export_menu = DIV(
>     A( T('Exports'),
>     SPAN(_class='caret'),
>     _href='#',
>     _class='btn dropdown-toggle',
>
>
>
>
>
>
> On Tuesday, October 23, 2012 8:38:54 AM UTC-5, Omi Chiba wrote:
>>
>> It works! Thank you for sharing your code.
>>
>>
>>
>> On Monday, October 22, 2012 5:00:19 PM UTC-5, Paolo Caruccio wrote:
>>>
>>> My fault. I extrapoled the code from more complex one.
>>>
>>> Try this:
>>>
>>> {{extend 'layout.html'}}
>>> {{
>>> w2p_grid_tbl = grid.element('table')
>>> if w2p_grid_tbl:
>>>  original_export_menu = grid.element('div.w2p_export_menu')
>>>  export_menu_links = original_export_menu.elements('a')
>>>  export_menu_items = []
>>>  for link in export_menu_links:
>>>      item = LI(link)
>>>      export_menu_items.append(item)
>>>  pass
>>>  new_export_menu = DIV(
>>>                       A( T('Exports'),
>>>                          SPAN(_class='caret'),
>>>                          _href='#',
>>>                          _class='btn dropdown-toggle',
>>>                          **{'_data-toggle':"dropdown"}
>>>                         ),
>>>                       UL(*export_menu_items,
>>>                          _class='dropdown-menu'
>>>                         ),
>>>                     _class='w2p_export_menu btn-group'
>>>                     )
>>>  export_menu = grid.element('div.w2p_export_menu',replace=
>>> new_export_menu)
>>> pass
>>> }}
>>>
>>> {{=grid}}
>>>
>>> Of course you could modify the DOM directly in the controller.
>>>
>>>
>>>
>>> Il giorno lunedì 22 ottobre 2012 22:56:48 UTC+2, Omi Chiba ha scritto:
>>>>
>>>> Wow! This is exactly what I wanted. I hope this will be the default 
>>>> layout for grid.
>>>>
>>>> I copy and pasted your code between {{extend 'layout.html'}} and 
>>>> {{=gird}}, then export labels are now disappeard...
>>>> Maybe you should check your code with the latest (2.1.1). 
>>>>
>>>> {{left_sidebar_enabled,right_sidebar_enabled=False,('message' in 
>>>> globals())}}
>>>> {{extend 'layout.html'}}
>>>> {{
>>>> w2p_grid_tbl = grid.element('table')
>>>> if w2p_grid_tbl:
>>>>  export_menu = grid.element('div.w2p_export_menu')
>>>>  export_menu_links = export_menu.elements('a')
>>>>  export_menu_items = []
>>>>  for link in export_menu_links:
>>>>      item = LI(link)
>>>>      export_menu_items.append(item)
>>>>  pass
>>>>  export_menu = grid.element('div.w2p_export_menu',replace=None)
>>>>  new_export_menu = DIV(
>>>>                       A( T('Exports'),
>>>>                          SPAN(_class='caret'),
>>>>                          _href='#',
>>>>                          _class='btn dropdown-toggle',
>>>>                          **{'_data-toggle':"dropdown"}
>>>>                         ),
>>>>                       UL(*export_menu_items,
>>>>                          _class='dropdown-menu'
>>>>                         ),
>>>>                     _class='w2p_export_menu btn-group'
>>>>                     )
>>>> pass
>>>> }}
>>>>
>>>> {{=grid}}
>>>>
>>>>
>>>>
>>>>
>>>> On Monday, October 22, 2012 2:10:53 PM UTC-5, Paolo Caruccio wrote:
>>>>>
>>>>> For grid export menu I'm happy with below method
>>>>>
>>>>> In the views/*.html file where is your grid put on top (just below 
>>>>> extend layout command)  the following code:
>>>>>
>>>>> {{
>>>>> w2p_grid_tbl = grid.element('table')
>>>>> if w2p_grid_tbl:
>>>>>  export_menu = grid.element('div.w2p_export_menu')
>>>>>  export_menu_links = export_menu.elements('a')
>>>>>  export_menu_items = []
>>>>>  for link in export_menu_links:
>>>>>      item = LI(link)
>>>>>      export_menu_items.append(item)
>>>>>  pass
>>>>>  export_menu = grid.element('div.w2p_export_menu',replace=None)
>>>>>  new_export_menu = DIV(
>>>>>                       A( T('Exports'),
>>>>>                          SPAN(_class='caret'),
>>>>>                          _href='#',
>>>>>                          _class='btn dropdown-toggle',
>>>>>                          **{'_data-toggle':"dropdown"}
>>>>>                         ),
>>>>>                       UL(*export_menu_items,
>>>>>                          _class='dropdown-menu'
>>>>>                         ),
>>>>>                     _class='w2p_export_menu btn-group'
>>>>>                     )
>>>>> pass
>>>>> }}
>>>>>
>>>>> In the attached picture you can see how the exports menu is rendered 
>>>>> using css bootstrap framework.
>>>>>
>>>>> The method is based on Server-side DOM and parsing (
>>>>> http://web2py.com/books/default/chapter/29/05#Server-side-DOM-and-parsing)
>>>>>  
>>>>> and it uses the elements argument "replace" (new beatiful and powerful - 
>>>>> in 
>>>>> my opinion - feature). For reference you could read 
>>>>> https://groups.google.com/forum/?fromgroups=#!topic/web2py/fbYZXoIOkCY
>>>>>
>>>>> I hope this will help you.
>>>>>
>>>>>  
>>>>>
>>>>> Il giorno lunedì 22 ottobre 2012 17:15:37 UTC+2, Omi Chiba ha scritto:
>>>>>>
>>>>>> New export function on grid has many choices but I need to keep the 
>>>>>> old format. (Export button for csv) because...
>>>>>>
>>>>>> - I'm using the gird for users (Maybe this format is good for us but 
>>>>>> not users.)
>>>>>> - Current export options layout is not pretty (I prefer button with 
>>>>>> dropdown list)
>>>>>> - I don't want users to see hidden columns
>>>>>>
>>>>>> Is there any option available for me?
>>>>>>
>>>>>>

-- 



Reply via email to