Odoo Help

Welcome!

This community is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

0

Element '<xpath expr="//header//a[@class='navbar-brand']">' cannot be located in parent view

By
brahim
on 11/18/16, 1:42 PM 359 views

Hello,


i had suddenly this error in my database (odoo 8.0):

 

Field(s) `arch` failed against a constraint: Invalid view definition
Error details:
Element '<xpath expr="//header//a[@class='navbar-brand']">' cannot be located in parent view
Error context:
View `Show Logo`
[view_id: 846, xml_id: website.layout_logo_show, model: n/a, parent_id: 844]" while parsing None:173, near
<data inherit_id="website.layout" customize_show="True" name="Show Logo">
<xpath expr="//header//a[@class='navbar-brand']" position="replace">
<a href="/" class="navbar-brand logo">
<img src="/logo.png" t-att-alt="'Logo of %s' % res_company.name" t-att-title="res_company.name"/>
</a>
</xpath>
</data>


no configuration or operation was made before

to resolve this issue i tried the following:

- update the module by command line - d databasename -u website

- update the module by command line - d databasename -u all

- comment the view "Show Logo" and update website module

- comment the view "Show Logo" and update all modules

none of the above procedures worked then i tried this step

- delete view from ir_ui_view table directly from database using name='Show Logo'  as a condition then updated the database with view 'Show logo' commented  in odoo-server/addons/website/views/website_templates.xml

this procedure worked for me. 

Now my question is why this error happened ? and is it correct to modify directly in website module ?

 

0
brahim
On 11/19/16, 4:49 AM

Thank you for your answer, i did a complete search in all directories  "header//a[@class='navbar-brand']" is only used in website module and in a custom module not installed in my database.  commenting this one in custom modulte didnt resolve the issue.

i took a look in  views there is only one view with external id = "website.layout"   Main Layout here is its content:


<t name="Main layout" t-name="website.layout">&lt;!DOCTYPE html&gt;
    <html t-att-lang="lang and lang.replace('_', '-')" t-att-data-website-id="website.id if editable and website else None"          t-att-data-editable="'1' if editable else None"          t-att-data-translatable="'1' if translatable else None"          t-att-data-view-xmlid="xmlid if editable else None" t-att-data-main-object="repr(main_object) if editable else None"          t-att-data-oe-company-name="res_company.name">        <head>            <meta charset="utf-8"/><t t-if="main_object and 'website_meta_title' in main_object and not title">            <t t-set="title" t-value="main_object.website_meta_title"/>        </t><t t-if="main_object and 'name' in main_object and not title and not additional_title">            <t t-set="additional_title" t-value="main_object.name"/></t>            <t t-if="not title"><t t-set="title"><t t-if="additional_title">                <t t-raw="additional_title"/> | </t><t t-esc="(website or res_company).name"/></t>            </t><meta name="viewport" content="initial-scale=1"/><meta name="description" t-att-content="main_object and 'website_meta_description' in main_object                 and main_object.website_meta_description or website_meta_description"/><meta name="keywords" t-att-content="main_object and 'website_meta_keywords' in main_object                 and main_object.website_meta_keywords or website_meta_keywords"/><meta name="generator" content="Odoo"/><title><t t-esc="title"/></title><t t-set="languages" t-value="website.get_languages() if website else None"/><t t-if="request and request.website_multilang and website"><t t-foreach="website.get_alternate_languages(request.httprequest)" t-as="lg"><link rel="alternate" t-att-hreflang="lg['hreflang']" t-att-href="lg['href']"/></t></t><t t-call-assets="web.assets_common" t-js="false"/><t t-call-assets="website.assets_frontend" t-js="false"/><t t-raw="head or ''" name="layout_head"/>        </head>        <body>            <div id="wrapwrap">            <header>                <div class="navbar navbar-default navbar-static-top">                    <div class="container">            <div class="navbar-header">                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-top-collapse">                    <span class="sr-only">Basculer la navigation</span><span class="icon-bar"/><span class="icon-bar"/><span class="icon-bar"/></button><span data-cke-widget-id="107" data-cke-display-name="a" class="cke_widget_wrapper cke_widget_inline" data-cke-filter="off" data-cke-widget-wrapper="1" tabindex="-1">        <a class="navbar-brand cke_widget_editable cke_widget_element" data-cke-enter-mode="2" data-cke-filter="43" data-cke-saved-href="/" data-cke-widget-data="{}" data-cke-widget-editable="text" data-cke-widget-keep-attr="0" data-widget="oeref" href="/" t-field="res_company.name"/></span></div><div class="collapse navbar-collapse navbar-top-collapse"><ul class="nav navbar-nav navbar-right" id="top_menu"><t t-foreach="website.menu_id.child_id" t-as="submenu"><t t-call="website.submenu"/></t><li class="divider" t-ignore="true" t-if="website.user_id != user_id"/><li class="dropdown" t-ignore="true" t-if="website.user_id != user_id"><a href="#" class="dropdown-toggle" data-toggle="dropdown"><b><span t-esc="user_id.name"/><span class="caret"/></b></a><ul class="dropdown-menu js_usermenu" role="menu"><li><a href="/web" role="menuitem">My Account</a></li><li class="divider"/><li><a t-attf-href="/web/session/logout?redirect=/" role="menuitem">Logout</a></li></ul></li></ul></div></div></div>            </header><main><t t-raw="0"/></main><footer><div id="footer_container">                    </div></footer></div>        <t t-call-assets="web.assets_common" t-css="false"/>        <t t-call-assets="website.assets_frontend" t-css="false"/>        <script t-if="website and website.google_analytics_key">                (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),                m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)                })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
                ga('create', _.str.trim('<t t-esc="website.google_analytics_key"/>'), 'auto');
                ga('send','pageview');
            </script>    </body></html></t>


could you check if the expression is correct ?   <xpath expr="//header//a[@class='navbar-brand']" position="replace">


i don know why but "navbar-brand" cant be located in the original website.layout view


Thanks.

0

Axel Mendoza

--Axel Mendoza--
10238
| 7 7 8
Camaguey, Cuba
--Axel Mendoza--

DevOps - Full stack - Software Architect - Developer - Technology Integrator

I could help you to develop anything and solve complex problems based on technologies, integrations and tricky stuffs mostly in Python with OpenERP/Odoo, Zato, Django and many others frameworks programming languages and technologies.

I offers consulting services to anyone with an unanswered questions or needs for customizations. Think about it, maybe it's better to have an expert to solve your issues and projects than having a full time employee trying to understand what to do an how

Reach me at aekroft@gmail.com

Axel Mendoza
On 11/19/16, 12:47 AM

That error could be related to that another view extension perhaps in another module or theme change the website.layout template making the xpath expr "//header//a[@class='navbar-brand']" unable to retrieve any node to transform and that cause the error. Perhaps the template was changed manually using the website editor or backend view form.

To determine what is the root of the issue you need to see what views are inheriting from the same view of your trouble view, in this case is website.layout the base view, so open up all the view that inherit from that view, you could do it in the views form in the backend with the technical features activated, in the menu /Settings/Technical/User Interface/Views

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

1 follower(s)

Stats

Asked: 11/18/16, 1:42 PM
Seen: 359 times
Last updated: 11/19/16, 4:49 AM