I have tried to find the cause of this issue, and believe it occurs due to 
the fact that A is a subclass of DIV.
The ```isinstance(link, DIV)``` test then evaluates to True when ```link``` 
is an object of type A.
I could not find an option to change the behaviour of ```isinstance()``` 
and resorted to changing the following lines in html.py


diff --git a/gluon/html.py b/gluon/html.py
index 4adf287c..180f39a4 100644
--- a/gluon/html.py
+++ b/gluon/html.py
@@ -2526,14 +2526,16 @@ class MENU(DIV):
                 ul.append(item)
             else:
                 (name, active, link) = item[:3]
-                if isinstance(link, DIV):
+                if isinstance(link, DIV) and not isinstance(link, A):
                     li = LI(link)
                 elif 'no_link_url' in self.attributes and 
self['no_link_url'] == link:
                     li = LI(DIV(name))
                 elif isinstance(link, dict):
                     li = LI(A(name, **link))
-                elif link:
+                elif link and not isinstance(link, A):
                     li = LI(A(name, _href=link))
+                elif link and isinstance(link, A):
+                    li = LI(name, link)
                 elif not link and isinstance(name, A):
                     li = LI(name)
                 else:
(END)






On Thursday, 7 June 2018 11:55:05 UTC+2, Rakesh Singh wrote:
>
> Hello,
>
> I have been trying to add external links to the menu system, but they 
> result in malformed or invalid URL's when setting the target attribute.
> There are some old posts in the group regarding this, but none of the 
> suggestions have worked.
>
> Web2py version : 2.16.1-stable
>
> Example:
> response.menu += [
>     ('External Links', False, '#', [
>         ('Icinga', False, URL('icinga'), []),
>         # Works
>         # SRC: <a class="dropdown-item" 
> href="/Rakesh_Singh/default/icinga">Icinga</a>
>         ('Google', False, google, []),
>         # Works
>         # SRC: <a class="dropdown-item" href="https://www.google.com
> ">Google</a>
>
>         # Change target...
>         ('', False, A('Icinga', _href=URL('icinga'), _target="_blank"), 
> []),
>         # Does not work; Menu item displays "Icinga\n>"
>         # SRC: <a class="dropdown-item" href="<a 
> href="/Rakesh_Singh/default/icinga" target="_blank">Icinga</a>"></a>      
>   
>         ]
>     )
> ]
>
>
> I have added a 'dirty' workaround in my layout.html that changes the 
> target to '_blank' if the URL contains the string 'http'
>
>             <div class="dropdown-menu">
>               {{for _subitem in _item[3]:}}
>               {{if _subitem[2].__contains__('http'):}}
>                 {{_target = '_blank'}}
>                 {{_rel = 'noopener'}}
>               {{else:}}
>                 {{_target = '_self'}}
>                 {{_rel = 'preconnect '}}
>               {{pass}}
>               <a class="dropdown-item" href="{{=_subitem[2]}}" 
> target="{{=_target}}" rel="{{=_rel}}">{{=_subitem[0]}}</a>
>
>
> Is there something incorrect in my code when specifying the target?
>
> Thank you.
>
>
>

-- 
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