<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Cambria;
        panose-1:2 4 5 3 5 4 6 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m trying to customize a dashboard using devstack and I have an issue to register my dashboard
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have followed the tutorial <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://docs.openstack.org/developer/horizon/tutorials/dashboard.html">https://docs.openstack.org/developer/horizon/tutorials/dashboard.html</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">So I left the file with default parameters after using this commands
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">mkdir openstack_dashboard/dashboards/mydashboard<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">python manage.db -- startdash mydashboard    --target openstack_dashboard/dashboards/mydashboard<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">mkdir openstack_dashboard/dashboards/mydashboard/mypanel<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">python manage.db  -- startpanel mypanel  --dashboard=openstack_dashboard.dashboards.mydashboard --target=openstack_dashboard/dashboards/mydashboard/mypanel<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I did not modify any file , the idea first was to see my dashboard created.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And finaly  I enabled my dashboard by creating a file _<i>50</i>_mydashboard.py with this<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><i># The name of the dashboard to be added to HORIZON['dashboards']. Required.</i><o:p></o:p></p>
<p class="MsoNormal">DASHBOARD = 'mydashboard'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><i># If set to True, this dashboard will not be added to the settings.</i><o:p></o:p></p>
<p class="MsoNormal">DISABLED = <b>False</b><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><i># A list of applications to be added to INSTALLED_APPS.</i><o:p></o:p></p>
<p class="MsoNormal">ADD_INSTALLED_APPS = [<o:p></o:p></p>
<p class="MsoNormal">    'openstack_dashboard.dashboards.mydashboard',<o:p></o:p></p>
<p class="MsoNormal">]<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I restart my virtual environment running on port 8000 and each time I tried to access to my dashboard I have this dump<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">System check identified no issues (0 silenced).<o:p></o:p></p>
<p class="MsoNormal">April 20, 2017 - 15:31:14<o:p></o:p></p>
<p class="MsoNormal">Django version 1.8.10, using settings 'openstack_dashboard.settings'<o:p></o:p></p>
<p class="MsoNormal">Starting development server at http://0.0.0.0:8000/<o:p></o:p></p>
<p class="MsoNormal">Quit the server with CONTROL-C.<o:p></o:p></p>
<p class="MsoNormal">Traceback (most recent call last):<o:p></o:p></p>
<p class="MsoNormal">  File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run<o:p></o:p></p>
<p class="MsoNormal">    self.result = application(self.environ, self.start_response)<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__<o:p></o:p></p>
<p class="MsoNormal">    return self.application(environ, start_response)<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 170, in __call__<o:p></o:p></p>
<p class="MsoNormal">    self.load_middleware()<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 52, in load_middleware<o:p></o:p></p>
<p class="MsoNormal">    mw_instance = mw_class()<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/middleware/locale.py", line 24, in __init__<o:p></o:p></p>
<p class="MsoNormal">    for url_pattern in get_resolver(None).url_patterns:<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 401, in url_patterns<o:p></o:p></p>
<p class="MsoNormal">    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 395, in urlconf_module<o:p></o:p></p>
<p class="MsoNormal">    self._urlconf_module = import_module(self.urlconf_name)<o:p></o:p></p>
<p class="MsoNormal">  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module<o:p></o:p></p>
<p class="MsoNormal">    __import__(name)<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/openstack_dashboard/urls.py", line 36, in <module><o:p></o:p></p>
<p class="MsoNormal">    url(r'', include(horizon.urls)),<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 34, in include<o:p></o:p></p>
<p class="MsoNormal">    patterns = getattr(urlconf_module, 'urlpatterns', urlconf_module)<o:p></o:p></p>
<p class="MsoNormal"> File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/utils/functional.py", line 225, in inner<o:p></o:p></p>
<p class="MsoNormal">    self._setup()<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/utils/functional.py", line 376, in _setup<o:p></o:p></p>
<p class="MsoNormal">    self._wrapped = self._setupfunc()<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/horizon/base.py", line 825, in url_patterns<o:p></o:p></p>
<p class="MsoNormal">    return self._urls()[0]<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/horizon/base.py", line 860, in _urls<o:p></o:p></p>
<p class="MsoNormal">    include(dash._decorated_urls)))<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/horizon/base.py", line 538, in _decorated_urls<o:p></o:p></p>
<p class="MsoNormal">    % self.default_panel)<o:p></o:p></p>
<p class="MsoNormal"><b>NotRegistered: The default panel "" is not registered.<o:p></o:p></b></p>
<p class="MsoNormal">[20/Apr/2017 15:31:27] "GET / HTTP/1.1" 500 59<o:p></o:p></p>
<p class="MsoNormal">Traceback (most recent call last):<o:p></o:p></p>
<p class="MsoNormal">  File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run<o:p></o:p></p>
<p class="MsoNormal">    self.result = application(self.environ, self.start_response)<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__<o:p></o:p></p>
<p class="MsoNormal">    return self.application(environ, start_response)<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 170, in __call__<o:p></o:p></p>
<p class="MsoNormal">    self.load_middleware()<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 52, in load_middleware<o:p></o:p></p>
<p class="MsoNormal">    mw_instance = mw_class()<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/middleware/locale.py", line 24, in __init__<o:p></o:p></p>
<p class="MsoNormal">    for url_pattern in get_resolver(None).url_patterns:<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 401, in url_patterns<o:p></o:p></p>
<p class="MsoNormal">    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 395, in urlconf_module<o:p></o:p></p>
<p class="MsoNormal">    self._urlconf_module = import_module(self.urlconf_name)<o:p></o:p></p>
<p class="MsoNormal">  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module<o:p></o:p></p>
<p class="MsoNormal">    __import__(name)<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/openstack_dashboard/urls.py", line 36, in <module><o:p></o:p></p>
<p class="MsoNormal">    url(r'', include(horizon.urls)),<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 34, in include<o:p></o:p></p>
<p class="MsoNormal">    patterns = getattr(urlconf_module, 'urlpatterns', urlconf_module)<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/utils/functional.py", line 225, in inner<o:p></o:p></p>
<p class="MsoNormal">    self._setup()<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/.venv/local/lib/python2.7/site-packages/django/utils/functional.py", line 376, in _setup<o:p></o:p></p>
<p class="MsoNormal">    self._wrapped = self._setupfunc()<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/horizon/base.py", line 825, in url_patterns<o:p></o:p></p>
<p class="MsoNormal">    return self._urls()[0]<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/horizon/base.py", line 860, in _urls<o:p></o:p></p>
<p class="MsoNormal">    include(dash._decorated_urls)))<o:p></o:p></p>
<p class="MsoNormal">  File "/opt/stack/horizon/horizon/base.py", line 538, in _decorated_urls<o:p></o:p></p>
<p class="MsoNormal">    % self.default_panel)<o:p></o:p></p>
<p class="MsoNormal"><b>NotRegistered: The default panel "" is not registered.<o:p></o:p></b></p>
<p class="MsoNormal">[20/Apr/2017 15:31:27] "GET / HTTP/1.1" 500 59<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>This is my dashboard.py <o:p></o:p></b></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">from django.utils.translation import ugettext_lazy as _<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">import horizon<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">class Mydashboard(horizon.Dashboard):<o:p></o:p></p>
<p class="MsoNormal">    name = _("Mydashboard")<o:p></o:p></p>
<p class="MsoNormal">    slug = "mydashboard"<o:p></o:p></p>
<p class="MsoNormal">    panels = ()  # Add your panels here.<o:p></o:p></p>
<p class="MsoNormal">    default_panel = ''  # Specify the slug of the dashboard's default panel.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">horizon.register(Mydashboard)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>This my panel.py <o:p></o:p></b></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">from django.utils.translation import ugettext_lazy as _<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">import horizon<o:p></o:p></p>
<p class="MsoNormal">from openstack_dashboard.dashboards.mydashboard import dashboard<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">class Mypanel(horizon.Panel):<o:p></o:p></p>
<p class="MsoNormal">    name = _("Mypanel")<o:p></o:p></p>
<p class="MsoNormal">    slug = "mypanel"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">dashboard.Mydashboard.register(Mypanel)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">any idea will be appreciated<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#440099;mso-fareast-language:FR">Eric Sans</span></b><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:black;mso-fareast-language:FR"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#5720AA;mso-fareast-language:FR">System Engineer / Extreme Networks</span><span style="color:black;mso-fareast-language:FR"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#595959;mso-fareast-language:FR"><a href="mailto:eric.sans@extremenetworks.com"><span style="color:#0563C1">eric.sans@extremenetworks.com</span></a></span><span style="color:black;mso-fareast-language:FR"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#595959;mso-fareast-language:FR">Office  / +33 (0)141-922-246<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#595959;mso-fareast-language:FR">Mobile / +33 (0)603848656<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria",serif;color:black;mso-fareast-language:FR"> </span><span style="color:black;mso-fareast-language:FR"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#595959;mso-fareast-language:FR">ExtremeNetworks.com</span><span style="color:black;mso-fareast-language:FR"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><b><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:#440099;mso-fareast-language:FR">Connect Beyond the Network<o:p></o:p></span></b></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<br>
<hr>
<font face="Arial" color="Gray" size="2"><br>
DISCLAIMER:<br>
This e-mail and any attachments to it may contain confidential and proprietary material and is solely for the use of the intended recipient. Any review, use, disclosure, distribution or copying of this transmittal is prohibited except by or on behalf of the
 intended recipient. If you have received this transmittal in error, please notify the sender and destroy this e-mail and any attachments and all copies, whether electronic or printed.<br>
</font>
</body>
</html>