nautobot / nautobot

Network Source of Truth & Network Automation Platform
https://docs.nautobot.com
Apache License 2.0
988 stars 264 forks source link

Multiple errors in template web pages #802

Open FloLaco opened 3 years ago

FloLaco commented 3 years ago

Environment

Steps to Reproduce

  1. Activate debug verbose level for django, nautobot, rq.worker (via nautobot_config.py)
  2. Go to the home page (http://mydomain.com:8080/) in webui (but I saw same errors on extra/jobs.html too)
  3. show logs

Expected Behavior

No error or traceback log

Observed Behavior

09:26:01.410 DEBUG   nautobot.releases    releases.py                 get_latest_release() :
  Skipping release check; RELEASE_CHECK_URL not defined
09:26:01.672 DEBUG   django.template      base.py                        _resolve_lookup() :
  Exception while resolving variable 'graphiql' in template 'home.html'.
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 829, in _resolve_lookup
    current = current[bit]
  File "/usr/local/lib/python3.6/site-packages/django/template/context.py", line 83, in __getitem__
    raise KeyError(key)
KeyError: 'graphiql'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 835, in _resolve_lookup
    if isinstance(current, BaseContext) and getattr(type(current), bit):
AttributeError: type object 'RequestContext' has no attribute 'graphiql'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 843, in _resolve_lookup
    current = current[int(bit)]
ValueError: invalid literal for int() with base 10: 'graphiql'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 850, in _resolve_lookup
    (bit, current))  # missing attribute
django.template.base.VariableDoesNotExist: Failed lookup for key [graphiql] in [{'True': True, 'False': False, 'None': None}, {'csrf_token': <SimpleLazyObject: <function csrf.<locals>._get_val at 0x7f07d1572048>>, 'request': <WSGIRequest: GET '/'>, 'MEDIA_URL': '/media/', 'user': <SimpleLazyObject: <User: florian>>, 'perms': <django.contrib.auth.context_processors.PermWrapper object at 0x7f07c6ba37b8>, 'messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0x7f07c6c115f8>, 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30, 'ERROR': 40}, 'backends': <LazyDict: <function backends.<locals>.<lambda> at 0x7f07c6b69c80>>, 'REDIRECT_FIELD_NAME': 'next', 'REDIRECT_FIELD_VALUE': None, 'REDIRECT_QUERYSTRING': '', 'settings': <LazySettings "nautobot_config">, 'registry': {'datasource_contents': defaultdict(<class 'list'>, {'extras.gitrepository': [<nautobot.extras.registry.DatasourceContent object at 0x7f07ca17b8b8>, <nautobot.extras.registry.DatasourceContent object at 0x7f07ca17be08>, <nautobot.extras.registry.DatasourceContent object at 0x7f07ca024048>, <nautobot.extras.registry.DatasourceContent object at 0x7f07ca024098>]}), 'nav_menu': {'tabs': OrderedDict([('Organization', {'weight': 100, 'groups': OrderedDict([('Sites', {'weight': 100, 'items': OrderedDict([('dcim:site_list', {'name': 'Sites', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'dcim:site_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_site']}), ('Import', {'link': 'dcim:site_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_site']})]), 'permissions': ['dcim.view_site']}), ('dcim:region_list', {'name': 'Regions', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'dcim:region_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_region']}), ('Import', {'link': 'dcim:region_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_region']})]), 'permissions': ['dcim.view_region']})]), 'permissions': {'dcim.view_site', 'dcim.view_region'}}), ('Racks', {'weight': 200, 'items': OrderedDict([('dcim:rack_list', {'name': 'Racks', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'dcim:rack_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_rack']}), ('Import', {'link': 'dcim:rack_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_rack']})]), 'permissions': ['dcim.view_rack']}), ('dcim:rackgroup_list', {'name': 'Rack Groups', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'dcim:rackgroup_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_rackgroup']}), ('Import', {'link': 'dcim:rackgroup_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_rackgroup']})]), 'permissions': ['dcim.view_rackgroup']}), ('dcim:rackrole_list', {'name': 'Rack Roles', 'weight': 300, 'buttons': OrderedDict([('Add', {'link': 'dcim:rackrole_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_rackrole']}), ('Import', {'link': 'dcim:rackrole_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_rackrole']})]), 'permissions': ['dcim.view_rackrole']}), ('dcim:rackreservation_list', {'name': 'Reservations', 'weight': 400, 'buttons': OrderedDict([('Add', {'link': 'dcim:rackreservation_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_rackreservation']}), ('Import', {'link': 'dcim:rackreservation_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_rackreservation']})]), 'permissions': ['dcim.view_rackreservation']}), ('dcim:rack_elevation_list', {'name': 'Elevations', 'weight': 500, 'buttons': OrderedDict(), 'permissions': ['dcim.view_rack']})]), 'permissions': {'dcim.view_rack', 'dcim.view_rackgroup', 'dcim.view_rackrole', 'dcim.view_rackreservation'}}), ('Tenancy', {'weight': 300, 'items': OrderedDict([('tenancy:tenant_list', {'name': 'Tenants', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'tenancy:tenant_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['tenancy.add_tag']}), ('Import', {'link': 'tenancy:tenant_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['tenancy.add_tenant']})]), 'permissions': ['tenancy.view_tenant']}), ('tenancy:tenantgroup_list', {'name': 'Tenant Groups', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'tenancy:tenantgroup_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['tenancy.add_tenantgroup']}), ('Import', {'link': 'tenancy:tenantgroup_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['tenancy.add_tenantgroup']})]), 'permissions': ['tenancy.view_tenantgroup']})]), 'permissions': {'tenancy.view_tenantgroup', 'tenancy.view_tenant'}}), ('Tags', {'weight': 400, 'items': OrderedDict([('extras:tag_list', {'name': 'Tags', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'extras:tag_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_tag']}), ('Import', {'link': 'extras:tag_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['extras.add_tag']})]), 'permissions': ['extras.view_tag']})]), 'permissions': {'extras.view_tag'}}), ('Statuses', {'weight': 500, 'items': OrderedDict([('extras:status_list', {'name': 'Statuses', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'extras:status_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_status']}), ('Import', {'link': 'extras:status_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['extras.add_status']})]), 'permissions': ['extras.view_status']})]), 'permissions': {'extras.view_status'}})]), 'permissions': {'dcim.view_site', 'tenancy.view_tenantgroup', 'dcim.view_rackreservation', 'dcim.view_rack', 'dcim.view_rackgroup', 'extras.view_status', 'dcim.view_region', 'dcim.view_rackrole', 'extras.view_tag', 'tenancy.view_tenant'}}), ('Devices', {'weight': 200, 'groups': OrderedDict([('Devices', {'weight': 100, 'items': OrderedDict([('dcim:device_list', {'name': 'Devices', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'dcim:device_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_device']}), ('Import', {'link': 'dcim:device_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_device']})]), 'permissions': ['dcim.view_device']}), ('dcim:devicerole_list', {'name': 'Device Roles', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'dcim:devicerole_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_devicerole']}), ('Import', {'link': 'dcim:devicerole_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_devicerole']})]), 'permissions': ['dcim.view_devicerole']}), ('dcim:platform_list', {'name': 'Platforms', 'weight': 300, 'buttons': OrderedDict([('Add', {'link': 'dcim:platform_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_platform']}), ('Import', {'link': 'dcim:platform_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_platform']})]), 'permissions': ['dcim.view_platform']}), ('dcim:virtualchassis_list', {'name': 'Virtual Chassis', 'weight': 400, 'buttons': OrderedDict([('Add', {'link': 'dcim:virtualchassis_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_virtualchassis']}), ('Import', {'link': 'dcim:virtualchassis_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_virtualchassis']})]), 'permissions': ['dcim.view_virtualchassis']})]), 'permissions': {'dcim.view_platform', 'dcim.view_virtualchassis', 'dcim.view_device', 'dcim.view_devicerole'}}), ('Device Types', {'weight': 200, 'items': OrderedDict([('dcim:devicetype_list', {'name': 'Device Types', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'dcim:devicetype_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_devicetype']}), ('Import', {'link': 'dcim:devicetype_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_devicetype']})]), 'permissions': ['dcim.view_devicetype']}), ('dcim:manufacturer_list', {'name': 'Manufacturers', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'dcim:manufacturer_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_manufacturer']}), ('Import', {'link': 'dcim:manufacturer_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_manufacturer']})]), 'permissions': ['dcim.view_manufacturer']})]), 'permissions': {'dcim.view_devicetype', 'dcim.view_manufacturer'}}), ('Connections', {'weight': 300, 'items': OrderedDict([('dcim:cable_list', {'name': 'Cables', 'weight': 100, 'buttons': OrderedDict([('Import', {'link': 'dcim:cable_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_cable']})]), 'permissions': ['dcim.view_cable']}), ('dcim:console_connections_list', {'name': 'Console Connections', 'weight': 200, 'buttons': OrderedDict(), 'permissions': ['dcim.view_consoleport', 'dcim.view_consoleserverport']}), ('dcim:power_connections_list', {'name': 'Power Connections', 'weight': 300, 'buttons': OrderedDict(), 'permissions': ['dcim.view_powerport', 'dcim.view_poweroutlet']}), ('dcim:interface_connections_list', {'name': 'Interface Connections', 'weight': 400, 'buttons': OrderedDict(), 'permissions': ['dcim.view_interface']})]), 'permissions': {'dcim.view_consoleserverport', 'dcim.view_powerport', 'dcim.view_poweroutlet', 'dcim.view_consoleport', 'dcim.view_cable', 'dcim.view_interface'}}), ('Device Components', {'weight': 400, 'items': OrderedDict([('dcim:interface_list', {'name': 'Interfaces', 'weight': 100, 'buttons': OrderedDict([('Import', {'link': 'dcim:interface_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_interface']})]), 'permissions': ['dcim.view_interface']}), ('dcim:frontport_list', {'name': 'Front Ports', 'weight': 200, 'buttons': OrderedDict([('Import', {'link': 'dcim:frontport_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_frontport']})]), 'permissions': ['dcim.view_frontport']}), ('dcim:rearport_list', {'name': 'Rear Ports', 'weight': 300, 'buttons': OrderedDict([('Import', {'link': 'dcim:rearport_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_rearport']})]), 'permissions': ['dcim.view_rearport']}), ('dcim:consoleport_list', {'name': 'Console Ports', 'weight': 400, 'buttons': OrderedDict([('Import', {'link': 'dcim:consoleport_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_consoleport']})]), 'permissions': ['dcim.view_consoleport']}), ('dcim:consoleserverport_list', {'name': 'Console Server Ports', 'weight': 500, 'buttons': OrderedDict([('Import', {'link': 'dcim:consoleserverport_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_consoleserverport']})]), 'permissions': ['dcim.view_consoleserverport']}), ('dcim:powerport_list', {'name': 'Power Ports', 'weight': 600, 'buttons': OrderedDict([('Import', {'link': 'dcim:powerport_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_powerport']})]), 'permissions': ['dcim.view_powerport']}), ('dcim:poweroutlet_list', {'name': 'Power Outlets', 'weight': 700, 'buttons': OrderedDict([('Import', {'link': 'dcim:poweroutlet_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_poweroutlet']})]), 'permissions': ['dcim.view_poweroutlet']}), ('dcim:devicebay_list', {'name': 'Device Bays', 'weight': 800, 'buttons': OrderedDict([('Import', {'link': 'dcim:devicebay_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_devicebay']})]), 'permissions': ['dcim.view_devicebay']}), ('dcim:inventoryitem_list', {'name': 'Inventory Items', 'weight': 900, 'buttons': OrderedDict([('Import', {'link': 'dcim:inventoryitem_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_inventoryitem']})]), 'permissions': ['dcim.view_inventoryitem']})]), 'permissions': {'dcim.view_consoleserverport', 'dcim.view_powerport', 'dcim.view_frontport', 'dcim.view_poweroutlet', 'dcim.view_consoleport', 'dcim.view_inventoryitem', 'dcim.view_devicebay', 'dcim.view_rearport', 'dcim.view_interface'}})]), 'permissions': {'dcim.view_devicetype', 'dcim.view_consoleport', 'dcim.view_virtualchassis', 'dcim.view_devicebay', 'dcim.view_manufacturer', 'dcim.view_consoleserverport', 'dcim.view_interface', 'dcim.view_poweroutlet', 'dcim.view_device', 'dcim.view_inventoryitem', 'dcim.view_rearport', 'dcim.view_cable', 'dcim.view_powerport', 'dcim.view_platform', 'dcim.view_frontport', 'dcim.view_devicerole'}}), ('IPAM', {'weight': 300, 'groups': OrderedDict([('IP Addresses', {'weight': 100, 'items': OrderedDict([('ipam:ipaddress_list', {'name': 'IP Addresses', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'ipam:ipaddress_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['ipam.add_ipaddress']}), ('Import', {'link': 'ipam:ipaddress_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_ipaddress']})]), 'permissions': ['ipam.view_ipaddress']})]), 'permissions': {'ipam.view_ipaddress'}}), ('Prefixes', {'weight': 200, 'items': OrderedDict([('ipam:prefix_list', {'name': 'Prefixes', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'ipam:prefix_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['ipam.add_prefix']}), ('Import', {'link': 'ipam:prefix_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_prefix']})]), 'permissions': ['ipam.view_prefix']}), ('ipam:role_list', {'name': 'Prefix/VLAN Roles', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'ipam:role_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['ipam.add_role']}), ('Import', {'link': 'ipam:role_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_role']})]), 'permissions': ['ipam.view_role']})]), 'permissions': {'ipam.view_role', 'ipam.view_prefix'}}), ('Aggregates', {'weight': 300, 'items': OrderedDict([('ipam:aggregate_list', {'name': 'Aggregates', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'ipam:aggregate_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['ipam.add_aggregate']}), ('Import', {'link': 'ipam:aggregate_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_aggregate']})]), 'permissions': ['ipam.view_aggregate']}), ('ipam:rir_list', {'name': 'RIRs', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'ipam:rir_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['ipam.add_rir']}), ('Import', {'link': 'ipam:rir_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_rir']})]), 'permissions': ['ipam.view_rir']})]), 'permissions': {'ipam.view_rir', 'ipam.view_aggregate'}}), ('VRFs', {'weight': 400, 'items': OrderedDict([('ipam:vrf_list', {'name': 'VRFs', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'ipam:vrf_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['ipam.add_vrf']}), ('Import', {'link': 'ipam:vrf_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_vrf']})]), 'permissions': ['ipam.view_vrf']}), ('ipam:routetarget_list', {'name': 'Route Targets', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'ipam:routetarget_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['ipam.add_routetarget']}), ('Import', {'link': 'ipam:routetarget_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_routetarget']})]), 'permissions': ['ipam.view_routetarget']})]), 'permissions': {'ipam.view_routetarget', 'ipam.view_vrf'}}), ('VLANs', {'weight': 500, 'items': OrderedDict([('ipam:vlan_list', {'name': 'VLANs', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'ipam:vlan_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['ipam.add_vlan']}), ('Import', {'link': 'ipam:vlan_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_vlan']})]), 'permissions': ['ipam.view_vlan']}), ('ipam:vlangroup_list', {'name': 'VLAN Groups', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'ipam:vlangroup_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['ipam.add_vlangroup']}), ('Import', {'link': 'ipam:vlangroup_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_vlangroup']})]), 'permissions': ['ipam.view_vlangroup']})]), 'permissions': {'ipam.view_vlangroup', 'ipam.view_vlan'}}), ('Services', {'weight': 600, 'items': OrderedDict([('ipam:service_list', {'name': 'Services', 'weight': 100, 'buttons': OrderedDict([('Import', {'link': 'ipam:service_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['ipam.add_service']})]), 'permissions': ['ipam.view_service']})]), 'permissions': {'ipam.view_service'}})]), 'permissions': {'ipam.view_vlan', 'ipam.view_vlangroup', 'ipam.view_vrf', 'ipam.view_rir', 'ipam.view_ipaddress', 'ipam.view_prefix', 'ipam.view_service', 'ipam.view_role', 'ipam.view_routetarget', 'ipam.view_aggregate'}}), ('Virtualization', {'weight': 400, 'groups': OrderedDict([('Virtual Machines', {'weight': 100, 'items': OrderedDict([('virtualization:virtualmachine_list', {'name': 'Virtual Machines', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'virtualization:virtualmachine_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['virtualization.add_virtualmachine']}), ('Import', {'link': 'virtualization:virtualmachine_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['virtualization.add_virtualmachine']})]), 'permissions': ['virtualization.view_virtualmachine']}), ('virtualization:vminterface_list', {'name': 'Interfaces', 'weight': 200, 'buttons': OrderedDict([('Import', {'link': 'virtualization:vminterface_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['virtualization.add_vminterface']})]), 'permissions': ['virtualization.view_vminterface']})]), 'permissions': {'virtualization.view_vminterface', 'virtualization.view_virtualmachine'}}), ('Clusters', {'weight': 200, 'items': OrderedDict([('virtualization:cluster_list', {'name': 'Clusters', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'virtualization:cluster_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['virtualization.add_cluster']}), ('Import', {'link': 'virtualization:cluster_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['virtualization.add_cluster']})]), 'permissions': ['virtualization.view_cluster']}), ('virtualization:clustertype_list', {'name': 'Cluster Types', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'virtualization:clustertype_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['virtualization.add_clustertype']}), ('Import', {'link': 'virtualization:clustertype_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['virtualization.add_clustertype']})]), 'permissions': ['virtualization.view_clustertype']}), ('virtualization:clustergroup_list', {'name': 'Cluster Groups', 'weight': 300, 'buttons': OrderedDict([('Add', {'link': 'virtualization:clustergroup_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['virtualization.add_clustergroup']}), ('Import', {'link': 'virtualization:clustergroup_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['virtualization.add_clustergroup']})]), 'permissions': ['virtualization.view_clustergroup']})]), 'permissions': {'virtualization.view_clustertype', 'virtualization.view_clustergroup', 'virtualization.view_cluster'}})]), 'permissions': {'virtualization.view_vminterface', 'virtualization.view_clustertype', 'virtualization.view_clustergroup', 'virtualization.view_virtualmachine', 'virtualization.view_cluster'}}), ('Circuits', {'weight': 500, 'groups': OrderedDict([('Circuits', {'weight': 100, 'items': OrderedDict([('circuits:circuit_list', {'name': 'Circuits', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'circuits:circuit_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['circuits.add_circuit']}), ('Import', {'link': 'circuits:circuit_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['circuits.add_circuit']})]), 'permissions': ['circuits.view_circuit']}), ('circuits:circuittype_list', {'name': 'Circuit Types', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'circuits:circuittype_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['circuits.add_circuittype']}), ('Import', {'link': 'circuits:circuittype_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['circuits.add_circuittype']})]), 'permissions': ['circuits.view_circuittype']})]), 'permissions': {'circuits.view_circuit', 'circuits.view_circuittype'}}), ('Providers', {'weight': 200, 'items': OrderedDict([('circuits:provider_list', {'name': 'Providers', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'circuits:provider_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['circuits.add_provider']}), ('Import', {'link': 'circuits:provider_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['circuits.add_provider']})]), 'permissions': ['circuits.view_provider']})]), 'permissions': {'circuits.view_provider'}})]), 'permissions': {'circuits.view_circuit', 'circuits.view_provider', 'circuits.view_circuittype'}}), ('Power', {'weight': 600, 'groups': OrderedDict([('Power', {'weight': 100, 'items': OrderedDict([('dcim:powerfeed_list', {'name': 'Power Feeds', 'weight': 1000, 'buttons': OrderedDict([('Add', {'link': 'dcim:powerfeed_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_powerfeed']}), ('Import', {'link': 'dcim:powerfeed_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_powerfeed']})]), 'permissions': ['dcim.view_powerfeed']}), ('dcim:powerpanel_list', {'name': 'Power Panels', 'weight': 1000, 'buttons': OrderedDict([('Add', {'link': 'dcim:powerpanel_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['dcim.add_powerpanel']}), ('Import', {'link': 'dcim:powerpanel_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['dcim.add_powerpanel']})]), 'permissions': ['dcim.view_powerpanel']})]), 'permissions': {'dcim.view_powerfeed', 'dcim.view_powerpanel'}})]), 'permissions': {'dcim.view_powerfeed', 'dcim.view_powerpanel'}}), ('Extensibility', {'weight': 700, 'groups': OrderedDict([('Logging', {'weight': 100, 'items': OrderedDict([('extras:objectchange_list', {'name': 'Change Log', 'weight': 100, 'buttons': OrderedDict(), 'permissions': ['extras.view_objectchange']}), ('extras:jobresult_list', {'name': 'Job Results', 'weight': 200, 'buttons': OrderedDict(), 'permissions': ['extras.view_jobresult']})]), 'permissions': {'extras.view_jobresult', 'extras.view_objectchange'}}), ('Data Sources', {'weight': 200, 'items': OrderedDict([('extras:gitrepository_list', {'name': 'Git Repositories', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'extras:gitrepository_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_gitrepository']}), ('Import', {'link': 'extras:gitrepository_import', 'icon_class': 'mdi-database-import-outline', 'button_class': 'primary', 'weight': 200, 'buttons': {}, 'permissions': ['extras.add_gitrepository']})]), 'permissions': ['extras.view_gitrepository']})]), 'permissions': {'extras.view_gitrepository'}}), ('Data Management', {'weight': 300, 'items': OrderedDict([('extras:graphqlquery_list', {'name': 'GraphQL Queries', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'extras:graphqlquery_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_graphqlquery']})]), 'permissions': ['extras.view_graphqlquery']}), ('extras:relationship_list', {'name': 'Relationships', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'extras:relationship_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_relationship']})]), 'permissions': ['extras.view_relationship']})]), 'permissions': {'extras.view_graphqlquery', 'extras.view_relationship'}}), ('Automation', {'weight': 400, 'items': OrderedDict([('extras:configcontext_list', {'name': 'Config Contexts', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'extras:configcontext_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_configcontext']})]), 'permissions': ['extras.view_configcontext']}), ('extras:configcontextschema_list', {'name': 'Config Context Schemas', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'extras:configcontextschema_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_configcontextschema']})]), 'permissions': ['extras.view_configcontextschema']}), ('extras:exporttemplate_list', {'name': 'Export Templates', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'extras:exporttemplate_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_exporttemplate']})]), 'permissions': ['extras.view_exporttemplate']}), ('extras:job_list', {'name': 'Jobs', 'weight': 300, 'buttons': OrderedDict(), 'permissions': ['extras.view_job']}), ('extras:webhook_list', {'name': 'Webhooks', 'weight': 400, 'buttons': OrderedDict([('Add', {'link': 'extras:webhook_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_webhook']})]), 'permissions': ['extras.view_webhook']})]), 'permissions': {'extras.view_exporttemplate', 'extras.view_job', 'extras.view_webhook', 'extras.view_configcontext', 'extras.view_configcontextschema'}}), ('Miscellaneous', {'weight': 500, 'items': OrderedDict([('extras:computedfield_list', {'name': 'Computed Fields', 'weight': 100, 'buttons': OrderedDict([('Add', {'link': 'extras:computedfield_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_computedfield']})]), 'permissions': ['extras.view_computedfield']}), ('extras:customlink_list', {'name': 'Custom Links', 'weight': 200, 'buttons': OrderedDict([('Add', {'link': 'extras:customlink_add', 'icon_class': 'mdi-plus-thick', 'button_class': 'success', 'weight': 100, 'buttons': {}, 'permissions': ['extras.add_customlink']})]), 'permissions': ['extras.view_customlink']})]), 'permissions': {'extras.view_computedfield', 'extras.view_customlink'}})]), 'permissions': {'extras.view_exporttemplate', 'extras.view_computedfield', 'extras.view_webhook', 'extras.view_customlink', 'extras.view_jobresult', 'extras.view_configcontext', 'extras.view_gitrepository', 'extras.view_job', 'extras.view_graphqlquery', 'extras.view_configcontextschema', 'extras.view_objectchange', 'extras.view_relationship'}})])}, 'plugin_custom_validators': defaultdict(<class 'list'>, {}), 'plugin_graphql_types': [], 'plugin_jobs': [], 'plugin_template_extensions': defaultdict(<class 'list'>, {}), 'model_features': {'config_context_owners': defaultdict(<class 'list'>, {'extras': ['gitrepository']}), 'custom_fields': defaultdict(<class 'list'>, {'extras': ['status', 'tag', 'gitrepository', 'configcontextschema', 'jobresult'], 'dcim': ['consoleport', 'consoleserverport', 'powerport', 'poweroutlet', 'interface', 'frontport', 'rearport', 'devicebay', 'inventoryitem', 'manufacturer', 'devicetype', 'devicerole', 'platform', 'device', 'virtualchassis', 'cable', 'consoleporttemplate', 'consoleserverporttemplate', 'powerporttemplate', 'poweroutlettemplate', 'interfacetemplate', 'frontporttemplate', 'rearporttemplate', 'devicebaytemplate', 'powerpanel', 'powerfeed', 'rackgroup', 'rackrole', 'rack', 'rackreservation', 'region', 'site'], 'circuits': ['provider', 'circuittype', 'circuit'], 'virtualization': ['clustertype', 'clustergroup', 'cluster', 'virtualmachine', 'vminterface'], 'ipam': ['vrf', 'routetarget', 'rir', 'aggregate', 'role', 'prefix', 'ipaddress', 'vlangroup', 'vlan', 'service'], 'tenancy': ['tenantgroup', 'tenant']}), 'custom_links': defaultdict(<class 'list'>, {'extras': ['status', 'jobresult'], 'dcim': ['devicetype', 'device', 'virtualchassis', 'cable', 'powerpanel', 'powerfeed', 'rack', 'rackreservation', 'site'], 'circuits': ['provider', 'circuit'], 'virtualization': ['cluster', 'virtualmachine', 'vminterface'], 'ipam': ['vrf', 'routetarget', 'aggregate', 'prefix', 'ipaddress', 'vlan', 'service'], 'tenancy': ['tenant']}), 'custom_validators': defaultdict(<class 'list'>, {'extras': ['status', 'tag', 'configcontextschema'], 'dcim': ['consoleport', 'consoleserverport', 'powerport', 'poweroutlet', 'interface', 'frontport', 'rearport', 'devicebay', 'inventoryitem', 'manufacturer', 'devicetype', 'devicerole', 'platform', 'device', 'virtualchassis', 'cable', 'consoleporttemplate', 'consoleserverporttemplate', 'powerporttemplate', 'poweroutlettemplate', 'interfacetemplate', 'frontporttemplate', 'rearporttemplate', 'devicebaytemplate', 'powerpanel', 'powerfeed', 'rackgroup', 'rackrole', 'rack', 'rackreservation', 'region', 'site'], 'circuits': ['provider', 'circuittype', 'circuit', 'circuittermination'], 'virtualization': ['clustertype', 'clustergroup', 'cluster', 'virtualmachine', 'vminterface'], 'ipam': ['vrf', 'routetarget', 'rir', 'aggregate', 'role', 'prefix', 'ipaddress', 'vlangroup', 'vlan', 'service'], 'tenancy': ['tenantgroup', 'tenant']}), 'export_template_owners': defaultdict(<class 'list'>, {'extras': ['gitrepository']}), 'export_templates': defaultdict(<class 'list'>, {'extras': ['status'], 'dcim': ['consoleport', 'powerport', 'interface', 'inventoryitem', 'manufacturer', 'devicetype', 'device', 'virtualchassis', 'cable', 'powerpanel', 'powerfeed', 'rackgroup', 'rack', 'rackreservation', 'region', 'site'], 'circuits': ['provider', 'circuit'], 'virtualization': ['cluster', 'virtualmachine', 'vminterface'], 'ipam': ['vrf', 'routetarget', 'aggregate', 'prefix', 'ipaddress', 'vlan', 'service'], 'tenancy': ['tenant']}), 'graphql': defaultdict(<class 'list'>, {'extras': ['computedfield', 'status', 'webhook', 'customlink', 'exporttemplate', 'configcontext', 'configcontextschema', 'jobresult', 'graphqlquery'], 'dcim': ['consoleport', 'consoleserverport', 'powerport', 'poweroutlet', 'interface', 'frontport', 'rearport', 'devicebay', 'inventoryitem', 'manufacturer', 'devicetype', 'devicerole', 'platform', 'device', 'virtualchassis', 'cable', 'cablepath', 'powerpanel', 'powerfeed', 'rackgroup', 'rackrole', 'rack', 'rackreservation', 'region', 'site'], 'circuits': ['provider', 'circuittype', 'circuit', 'circuittermination'], 'virtualization': ['clustertype', 'clustergroup', 'cluster', 'virtualmachine', 'vminterface'], 'ipam': ['vrf', 'routetarget', 'rir', 'aggregate', 'role', 'prefix', 'ipaddress', 'vlangroup', 'vlan', 'service'], 'tenancy': ['tenantgroup', 'tenant']}), 'job_results': defaultdict(<class 'list'>, {'extras': ['gitrepository', 'job']}), 'relationships': defaultdict(<class 'list'>, {'extras': ['status', 'tag', 'gitrepository', 'exporttemplate', 'configcontextschema'], 'dcim': ['consoleport', 'consoleserverport', 'powerport', 'poweroutlet', 'interface', 'frontport', 'rearport', 'devicebay', 'inventoryitem', 'manufacturer', 'devicetype', 'devicerole', 'platform', 'device', 'virtualchassis', 'cable', 'consoleporttemplate', 'consoleserverporttemplate', 'powerporttemplate', 'poweroutlettemplate', 'interfacetemplate', 'frontporttemplate', 'rearporttemplate', 'devicebaytemplate', 'powerpanel', 'powerfeed', 'rackgroup', 'rackrole', 'rack', 'rackreservation', 'region', 'site'], 'circuits': ['provider', 'circuittype', 'circuit', 'circuittermination'], 'virtualization': ['clustertype', 'clustergroup', 'cluster', 'virtualmachine', 'vminterface'], 'ipam': ['vrf', 'routetarget', 'rir', 'aggregate', 'role', 'prefix', 'ipaddress', 'vlangroup', 'vlan', 'service'], 'tenancy': ['tenantgroup', 'tenant']}), 'statuses': defaultdict(<class 'list'>, {'dcim': ['device', 'cable', 'powerfeed', 'rack', 'site'], 'circuits': ['circuit'], 'virtualization': ['virtualmachine'], 'ipam': ['prefix', 'ipaddress', 'vlan']}), 'webhooks': defaultdict(<class 'list'>, {'extras': ['status', 'gitrepository'], 'dcim': ['consoleport', 'consoleserverport', 'powerport', 'poweroutlet', 'interface', 'frontport', 'rearport', 'devicebay', 'inventoryitem', 'manufacturer', 'devicetype', 'device', 'virtualchassis', 'cable', 'powerpanel', 'powerfeed', 'rack', 'rackreservation', 'region', 'site'], 'circuits': ['provider', 'circuit'], 'virtualization': ['cluster', 'virtualmachine', 'vminterface'], 'ipam': ['vrf', 'routetarget', 'aggregate', 'prefix', 'ipaddress', 'vlan', 'service'], 'tenancy': ['tenant']})}}, 'SAML_IDP': <function get_saml_idp at 0x7f07c6b69ae8>, 'SSO_AUTH_ENABLED': <function sso_auth.<locals>.<lambda> at 0x7f07c6b69d08>}, {}, {'view': <nautobot.core.views.HomeView object at 0x7f07c6c11278>, 'search_form': <SearchForm bound=False, valid=Unknown, fields=(q;obj_type)>, 'stats': {'site_count': 0, 'tenant_count': 0, 'rack_count': 0, 'devicetype_count': 1, 'device_count': 0, 'interface_connections_count': 0, 'cable_count': 0, 'console_connections_count': 0, 'power_connections_count': 0, 'powerpanel_count': 0, 'powerfeed_count': 0, 'virtualchassis_count': 0, 'vrf_count': 0, 'aggregate_count': 0, 'prefix_count': 0, 'ipaddress_count': 0, 'vlan_count': 0, 'provider_count': 0, 'circuit_count': 0, 'cluster_count': 0, 'virtualmachine_count': 0, 'gitrepository_count': 0}, 'job_results': <RestrictedQuerySet []>, 'changelog': <RestrictedQuerySet [<ObjectChange: dcim | device role Access Switch created by florian>, <ObjectChange: dcim | platform Nexus 5596 deleted by florian>, <ObjectChange: dcim | device type Nexus 5596UP created by florian>, <ObjectChange: dcim | platform Nexus 5596 created by florian>, <ObjectChange: dcim | manufacturer Arista created by florian>, <ObjectChange: dcim | manufacturer Cisco created by florian>]>, 'new_release': None}, {}]
09:26:01.681 DEBUG   django.template      base.py                        _resolve_lookup() :
  Exception while resolving variable 'q' in template 'home.html'.
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/utils/datastructures.py", line 76, in __getitem__
    list_ = super().__getitem__(key)
KeyError: 'q'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 829, in _resolve_lookup
    current = current[bit]
  File "/usr/local/lib/python3.6/site-packages/django/utils/datastructures.py", line 78, in __getitem__
    raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'q'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 837, in _resolve_lookup
    current = getattr(current, bit)
AttributeError: 'QueryDict' object has no attribute 'q'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 843, in _resolve_lookup
    current = current[int(bit)]
ValueError: invalid literal for int() with base 10: 'q'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 850, in _resolve_lookup
    (bit, current))  # missing attribute
django.template.base.VariableDoesNotExist: Failed lookup for key [q] in <QueryDict: {}>

my nautobot_config.py

SECRET_KEY = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

DEBUG = False

ALLOWED_HOSTS = ['*']

DATABASES = {
    'default': {
        'NAME': 'nautobot',                         # Database name
        'USER': 'user1',                            # Database username
        'PASSWORD': 'cisco1234',                    # Database password
        'HOST': 'sql-nautobot',                     # Database server
        'PORT': '',                                 # Database port (leave blank for default)
        'CONN_MAX_AGE': 300,                        # Max database connection age
        'ENGINE': 'django.db.backends.postgresql',  # Database driver ("mysql" or "postgresql")
    }
}

# Set CACHEOPS_REDIS to an empty value
CACHEOPS_REDIS = False

# If you want to use Sentinel, specify this variable
CACHEOPS_SENTINEL = {
    "locations": [("redis-sentinel", 26379)], # Sentinel locations, required
    "service_name": "mymaster",          # Sentinel service name, required
    "socket_timeout": 11,                # Connection timeout in seconds, optional
    "db": 10                              # Redis database, default: 0
    # ...                                # Everything else is passed to `Sentinel()`
}

RQ_QUEUES = {
    "default": {
        "SENTINELS": [
            ("redis-sentinel", 26379)
            # ("othersentinel.redis.example.com", 6379)
        ],
        "MASTER_NAME": "mymaster",
        "DB": 10,
        "PASSWORD": "",
        "SOCKET_TIMEOUT": None,
        "CONNECTION_KWARGS": {
            "socket_connect_timeout": 10,
        },
        "SSL": False,
    },
    "check_releases": {
        "SENTINELS": [
            ("redis-sentinel", 26379)
            # ("othersentinel.redis.example.com", 6379)
        ],
        "MASTER_NAME": "mymaster",
        "DB": 10,
        "PASSWORD": "",
        "SOCKET_TIMEOUT": None,
        "CONNECTION_KWARGS": {
            "socket_connect_timeout": 10,
        },
        "SSL": False,
    },
    "custom_fields": {
        "SENTINELS": [
            ("redis-sentinel", 26379)
            # ("othersentinel.redis.example.com", 6379)
        ],
        "MASTER_NAME": "mymaster",
        "DB": 10,
        "PASSWORD": "",
        "SOCKET_TIMEOUT": None,
        "CONNECTION_KWARGS": {
            "socket_connect_timeout": 10,
        },
        "SSL": False,
    },
    "webhooks": {
        "SENTINELS": [
            ("redis-sentinel", 26379)
            # ("othersentinel.redis.example.com", 6379)
        ],
        "MASTER_NAME": "mymaster",
        "DB": 10,
        "PASSWORD": "",
        "SOCKET_TIMEOUT": None,
        "CONNECTION_KWARGS": {
            "socket_connect_timeout": 10,
        },
        "SSL": False,
    },

}

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'normal': {
            'format': '%(asctime)s.%(msecs)03d %(levelname)-7s %(name)s : %(message)s',
            'datefmt': '%H:%M:%S',
        },
        'verbose': {
            'format': '%(asctime)s.%(msecs)03d %(levelname)-7s %(name)-20s %(filename)-15s %(funcName)30s() :\n  %(message)s',
            'datefmt': '%H:%M:%S',
        },
    },
    'handlers': {
        'file': {'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/opt/nautobot/nautobot.log', 'formatter': 'normal'},
        'normal_console': {'level': 'DEBUG', 'class': 'rq.utils.ColorizingStreamHandler', 'formatter': 'normal'},
        'verbose_console': {'level': 'DEBUG', 'class': 'rq.utils.ColorizingStreamHandler', 'formatter': 'verbose'},
    },
    'loggers': {
        'django': {'handlers': ['file', 'verbose_console'], 'level': 'DEBUG'},
        'nautobot': {'handlers': ['file', 'verbose_console'], 'level': 'DEBUG'},
        'rq.worker': {'handlers': ['file', 'verbose_console'], 'level': 'DEBUG'},
    },
}
glennmatthews commented 3 years ago

Thanks for the report! I agree that this is technically a bug, but given that Django gracefully handles these errors when rendering the pages, and the "error" messages are only logged when enabling DEBUG logs for Django, I don't know how much of a priority we'll realistically assign to fixing this issue.

FloLaco commented 3 years ago

Sure ! It's a non blocking issue. I've seen this because I've other issue which I'll report later.

FloLaco commented 3 years ago

Errors about graphiql is due to this line : https://github.com/nautobot/nautobot/blob/dee26f76b0a51c6617f3a1043f8f97ea154f2178/nautobot/core/templates/inc/nav_menu.html#L124

glennmatthews commented 3 years ago

The graphiql error in particular will be addressed by refactoring in #781. Thanks!

FloLaco commented 3 years ago

@glennmatthews Ok perfect !

For the q errors, the issue is in this line : https://github.com/nautobot/nautobot/blob/dee26f76b0a51c6617f3a1043f8f97ea154f2178/nautobot/core/templates/search_form.html#L4