Résolue

Utilisation d'un fichier .py comme template dans Django

# Django # Bootstrap # plotly

Bonjour ,
Je souhaite utiliser un fichier .py en tant que template et pas un fichier HTML .
Avez vous une solution ?

Ci dessous voici mon template python . C'est un fichier que j'aie nommé app.py
Ci je lance la commande python app.py . Le gabarit fonctionne et s'affiche bien dans mon navigateur Chrome .
Mais je n'arrive pas à le lancer à partir de Django avec la commande python python manage.py runserver

import dash
import dash_bootstrap_components as dbc
from dash import dcc
from dash import html
import pandas as pd
import plotly.express as px
import requests ,base64
from io import BytesIO
import plotly.graph_objects as go
import plotly.express as px
from collections import Counter
from dash.dependencies import Input, Output 

df = px.data.iris()  # iris is a pandas DataFrame
fig = px.scatter(df, x="sepal_width", y="sepal_length")



# ci dessous je fais un lien vers le thème de bootstrap que j'ai choisit nommé DARKLY
app = dash.Dash(external_stylesheets=[dbc.themes.DARKLY])

# ci dessous je fais une mise en page de mon application finale avec une div vide
#app.layout = html.Div([])

# ci dessous je fais une mise en page de mon application finale avec un composant de bootstrap nommé container
# sachant que container est un composant de base à connaitre autant que row et col
# il fait parti des fondamentaux de bootstrap

app.layout = dbc.Container([

    # 1 ère ligne avec 1 colonne
    dbc.Row([
        dbc.Col([
            html.H1('Mon header')
        ])
    ]),

    # 2 ème ligne avec 3 colonnes

    dbc.Row([
        dbc.Col([
            html.H2('Nombre de cas confirmés')
        ],width=3),
        dbc.Col([
            html.H2('Nombre de décès'),
            dcc.Graph(figure=fig)
        ],width=6),
        dbc.Col([
            html.H2('Nombre de personnes hospitalisées')
        ],width=3),
    ]),

    # 3 ème ligne avec 1 colonnes symbolisant mon footer
    dbc.Row([
        dbc.Col([
            html.H3('Mon footer')
        ])

    ])
])


if __name__== '__main__':
    app.run_server(debug=True ,port=8888)

Gabriel Trouvé

Mentor

Salut !

Est-ce que tu as essayé avec Django dash ?

https://django-plotly-dash.readthedocs.io/en/latest/simple_use.html

Apparement niveau intégration c'est top !

Bonjour désolé , je n'arrive pas à charger DjangoDash
Cela bug à ligne 3 de mon template html nommé "dash_template.html" .
Voici la ligne 3 incriminée

{%load plotly_dash%}

Ci dessous le message d'erreur dans mon navigateur (un message d'erreur de syntaxe concernant mon template)

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/dash/

Django Version: 5.1.6
Python Version: 3.13.0
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'myapp']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\templates\myapp\plotly_dash\dash_template.html, error at line 3
   'plotly_dash' is not a registered tag library. Must be one of:
admin_list
admin_modify
admin_urls
cache
i18n
l10n
log
static
tz
   1 : 
   2 : <!-- templates/myapp/dash_template.html -->
   3 :  {%load plotly_dash%} 
   4 : {% plotly_app name="SimpleExample" %}
   5 : <!DOCTYPE html>


   6 : <html>
   7 : <head>
   8 :     <title>Dash in Django</title>
   9 :     {% load static %}
   10 :   
   11 :     {% plotly_header %}
   12 :     <link href="{% static 'dash.css' %}" rel="stylesheet"/>
   13 : </head>


Traceback (most recent call last):
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\defaulttags.py", line 1035, in find_library
    return parser.libraries[name]
           ^^^^^^^^^^^^^^^^^^^^^^

During handling of the above exception ('plotly_dash'), another exception occurred:
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\views.py", line 9, in dash_view
    return render(request, 'myapp/plotly_dash/dash_template.html', context= {"moninstance" : 5})
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\shortcuts.py", line 25, in render
    content = loader.render_to_string(template_name, context, request, using=using)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\loader.py", line 61, in render_to_string
    template = get_template(template_name, using=using)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\loader.py", line 15, in get_template
    return engine.get_template(template_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\backends\django.py", line 79, in get_template
    return Template(self.engine.get_template(template_name), self)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\engine.py", line 177, in get_template
    template, origin = self.find_template(template_name)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\engine.py", line 159, in find_template
    template = loader.get_template(name, skip=skip)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\loaders\cached.py", line 57, in get_template
    template = super().get_template(template_name, skip)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\loaders\base.py", line 28, in get_template
    return Template(

  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 154, in __init__
    self.nodelist = self.compile_nodelist()
                    ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 196, in compile_nodelist
    nodelist = parser.parse()
               ^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 518, in parse
    raise self.error(token, e)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 516, in parse
    compiled_result = compile_func(self, token)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\defaulttags.py", line 1097, in load
    lib = find_library(parser, name)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\defaulttags.py", line 1037, in find_library
    raise TemplateSyntaxError(
    ^

Exception Type: TemplateSyntaxError at /dash/
Exception Value: 'plotly_dash' is not a registered tag library. Must be one of:
admin_list
admin_modify
admin_urls
cache
i18n
l10n
log
static
tz

Ci dessous mon fichier dash_app.py

import plotly.express as px
import pandas as pd
from django_plotly_dash import DjangoDash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output



# pour intégrer dash dans Django je dois créer une instance DjangoDash !
app = DjangoDash('SimpleExample')   # replaces dash.Dash

# Créer une instance Dash pas mal mais à vérifier
# app = dash.Dash(__name__, server=False)

# Exemple de données
df = pd.DataFrame({
        "Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
        "Amount": [4, 1, 2, 2, 4, 5],
        "City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"]
})

# Créer le layout de l'application Dash
app.layout = html.Div([
        dcc.Dropdown(
            id='dropdown',
            options=[
                {'label': 'SF', 'value': 'SF'},
                {'label': 'Montreal', 'value': 'Montreal'}
            ],
            value='SF'
        ),
        dcc.Graph(id='graph')
])

# Callback pour mettre à jour le graphique en fonction du dropdown
@app.callback(
    Output('graph', 'figure'),
    [Input('dropdown', 'value')]
)
def update_graph(selected_city):
    filtered_df = df[df['City'] == selected_city]
    fig = px.bar(filtered_df, x='Fruit', y='Amount', color='Fruit')
    return fig

Je n'arrive pas à lancer ce fichier python avec la commande .

(.env) PS C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp> python .\dash_app.py
C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\dash_app.py:4: UserWarning:


The dash_core_components package is deprecated. Please replace
`import dash_core_components as dcc` with `from dash import dcc`

C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\dash_app.py:5: UserWarning:


The dash_html_components package is deprecated. Please replace
`import dash_html_components as html` with `from dash import html`

Traceback (most recent call last):
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\dash_app.py", line 11, in <module>
    app = DjangoDash('SimpleExample')   # replaces dash.Dash
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django_plotly_dash\dash_wrapper.py", line 187, in __init__
    self._serve_locally = serve_locally_setting()
                          ~~~~~~~~~~~~~~~~~~~~~^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django_plotly_dash\util.py", line 124, in serve_locally
    return _get_settings().get('serve_locally', False)
           ~~~~~~~~~~~~~^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django_plotly_dash\util.py", line 41, in _get_settings
    the_settings = settings.PLOTLY_DASH
                   ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\conf\__init__.py", line 81, in __getattr__
    self._setup(name)
    ~~~~~~~~~~~^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\conf\__init__.py", line 61, in _setup
    raise ImproperlyConfigured(
    ...<4 lines>...
    )
django.core.exceptions.ImproperlyConfigured: Requested setting PLOTLY_DASH, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
(.env) PS C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp> 

ci dessous le code de mon fichier views.py

from django.shortcuts import render,HttpResponse

# Create your views here.
# ma premiere vue
def dashboard(request):
    return HttpResponse("<h1>Hello World</h1>")
# ma deuxieme vue
def dash_view(request):
    return render(request, 'myapp/plotly_dash/dash_template.html', context= {"moninstance" : 5})

ci dessous mon fichier urls.py

from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path('', views.dashboard, name='dashboard'),
    path('dash/', views.dash_view, name='dash-view'),

    ]

ci dessous le code de mon template

<!-- templates/myapp/dash_template.html -->
{%load plotly_dash%}
{% plotly_app name="SimpleExample" %}
<!DOCTYPE html>

<html>
<head>
<title>Dash in Django</title>
    {% load static %}

    {% plotly_header %}
    <link href="{% static 'dash.css' %}" rel="stylesheet"/>
</head>
<body>
<div id="dash-app"></div>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dash/1.20.0/dash.min.js"></script>
<!-- Charger l'instance app qui a été crée dans le fichier nommé dash_app.py-->
<h1>Je suis passé dans le template</h1>
<script>
        {{ app }}
    </script>
</body>
</html>

Si je renonce à charger mon fichier dash_app.py , mon template fonction cad le fichier css charge et la balise "h1" affiche que je suis passé dans le template .

Si je dois régler mon fichier settings.py .Je ne sais pas ce que je dois y faire .

Gabriel Trouvé

Mentor

On dirat que :

'django_plotly_dash'

n'est pas dans ton settings.py. Tu l'as bien mis ?

Tu as des imports dépréciés. Tu dois bien importer de cette manière :

from dash import dcc, html

Et si tu fais bien ton runserver après ça devrait aller je pense.

C'est bon pour toi ?

Bonjour ,
C'est passé , mais maintenant , c'est la ligne du dessous qui stop !
cad ici

{% plotly_dash name="SimpleExample" %}

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/dash/

Django Version: 5.1.6
Python Version: 3.13.0
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'myapp',
 'django_plotly_dash']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\templates\myapp\plotly_dash\dash_template.html, error at line 10
   Invalid block tag on line 10: 'plotly_dash'. Did you forget to register or load this tag?
   1 : 
   2 : <!-- templates/myapp/dash_template.html -->
   3 : 
   4 : <!DOCTYPE html>

   5 : <html>
   6 : <head>
   7 :     <title>Dash in Django</title>
   8 :     {% load static %}
   9 :     {% load plotly_dash %}
   10 :      {% plotly_dash name="SimpleExample" %} 
   11 :     {% plotly_header %}
   12 :     <link href="{% static 'dash.css' %}" rel="stylesheet"/>
   13 : </head>
   14 : <body>
   15 :     <div id="dash-app"></div>
   16 :     <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
   17 :     <script src="https://cdnjs.cloudflare.com/ajax/libs/dash/1.20.0/dash.min.js"></script>
   18 :     <!-- Charger l'instance app qui a été crée dans le fichier nommé dash_app.py-->
   19 :     <h1>Je suis passé dans le template</h1>
   20 :     


Traceback (most recent call last):
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 510, in parse
    compile_func = self.tags[command]
                   ^^^^^^^^^^^^^^^^^^

During handling of the above exception ('plotly_dash'), another exception occurred:
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\views.py", line 9, in dash_view
    return render(request, 'myapp/plotly_dash/dash_template.html', context= {"moninstance" : 5})
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\shortcuts.py", line 25, in render
    content = loader.render_to_string(template_name, context, request, using=using)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\loader.py", line 61, in render_to_string
    template = get_template(template_name, using=using)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\loader.py", line 15, in get_template
    return engine.get_template(template_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\backends\django.py", line 79, in get_template
    return Template(self.engine.get_template(template_name), self)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\engine.py", line 177, in get_template
    template, origin = self.find_template(template_name)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\engine.py", line 159, in find_template
    template = loader.get_template(name, skip=skip)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\loaders\cached.py", line 57, in get_template
    template = super().get_template(template_name, skip)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\loaders\base.py", line 28, in get_template
    return Template(

  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 154, in __init__
    self.nodelist = self.compile_nodelist()
                    ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 196, in compile_nodelist
    nodelist = parser.parse()
               ^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 512, in parse
    self.invalid_block_tag(token, command, parse_until)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 573, in invalid_block_tag
    raise self.error(
    ^

Exception Type: TemplateSyntaxError at /dash/
Exception Value: Invalid block tag on line 10: 'plotly_dash'. Did you forget to register or load this tag?

J'aie crée un dossier nommé "plotly_dash" et dedans j'aie mis mon template html . Je ne sais si je devais procéder comme cela .
( le chemin fait templates\myapp\plotly_dash\dash_template.html .

Ci dessous mon fichier settings.py

```
"""
Django settings for hop project.

Generated by 'django-admin startproject' using Django 5.1.6.

For more information on this file, see
https://docs.djangoproject.com/en/5.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.1/ref/settings/
"""

from pathlib import Path

Build paths inside the project like this: BASE_DIR / 'subdir'.

BASE_DIR = Path(file).resolve().parent.parent

Quick-start development settings - unsuitable for production

See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/

SECURITY WARNING: keep the secret key used in production secret!

SECRET_KEY = 'django-insecure-wqp+-ex-rfeal9r2)&k!s0(63edz00er6ny3ljm=ixrb^@r+%e'

SECURITY WARNING: don't run with debug turned on in production!

DEBUG = True

ALLOWED_HOSTS = []

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'django_plotly_dash'
]

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'hop.urls'

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

WSGI_APPLICATION = 'hop.wsgi.application'

Database

https://docs.djangoproject.com/en/5.1/ref/settings/#databases

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}

Password validation

https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]

Internationalization

https://docs.djangoproject.com/en/5.1/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True

Static files (CSS, JavaScript, Images)

https://docs.djangoproject.com/en/5.1/howto/static-files/

STATIC_URL = 'static/'

Default primary key field type

https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

```

C'est plutôt :

{%plotly_app name="SimpleExample"%}

Normalement c'est ok si tu fais ça

Encore un bug !

```
Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/dash/

Django Version: 5.1.6
Python Version: 3.13.0
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'django_plotly_dash']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']

Template error:
In template C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\templates\myapp\plotly_dash\dash_template.html, error at line 10
'the_django_plotly_dash' is not a registered namespace
1 :
2 :
3 :
4 : <!DOCTYPE html>

5 : <html>
6 : <head>
7 : <title>Dash in Django</title>
8 : {% load static %}
9 : {% load plotly_dash %}
10 : {% plotly_app name="SimpleExample" %}
11 : <link href="{% static 'dash.css' %}" rel="stylesheet"/>
12 : </head>
13 : <body>
14 :


15 : <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
16 : <script src="https://cdnjs.cloudflare.com/ajax/libs/dash/1.20.0/dash.min.js"></script>
17 :
18 :


19 :
20 : <script></script></body></html>

Gabriel Trouvé

Mentor

Tu peux mettre ton code au format code ?

ça sera plus simple ^^
Car là j'ai des underscore qui doivent disparaitre entre deux

Merci d'avance

C'est ce que je fait et j'aie constaté que ce bouton faisait des affichages parfois étranges .
Peut - être avec le bouton "quotes" comme ceci ...

> Environment:
> 
> 
> Request Method: GET
> Request URL: http://127.0.0.1:8000/dash/
> 
> Django Version: 5.1.6
> Python Version: 3.13.0
> Installed Applications:
> ['django.contrib.admin',
>  'django.contrib.auth',
>  'django.contrib.contenttypes',
>  'django.contrib.sessions',
>  'django.contrib.messages',
>  'django.contrib.staticfiles',
>  'myapp',
>  'django_plotly_dash']
> Installed Middleware:
> ['django.middleware.security.SecurityMiddleware',
>  'django.contrib.sessions.middleware.SessionMiddleware',
>  'django.middleware.common.CommonMiddleware',
>  'django.middleware.csrf.CsrfViewMiddleware',
>  'django.contrib.auth.middleware.AuthenticationMiddleware',
>  'django.contrib.messages.middleware.MessageMiddleware',
>  'django.middleware.clickjacking.XFrameOptionsMiddleware']
> 
> 
> Template error:
> In template C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\templates\myapp\plotly_dash\dash_template.html, error at line 19
>    'the_django_plotly_dash' is not a registered namespace
>    9 :     {% load plotly_dash %}
>    10 :     
>    11 :     <link href="{% static 'dash.css' %}" rel="stylesheet"/>
>    12 : 
>    13 : <body>
>    14 :     <div id="dash-app"></div>
>    15 :     <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
>    16 :     <script src="https://cdnjs.cloudflare.com/ajax/libs/dash/1.20.0/dash.min.js"></script>
>    17 :  
>    18 :     <h1>Je suis passé dans le template</h1>
>    19 :      {% plotly_app name="SimpleExample" %} 
>    20 :     <script>
>    21 :         {{ app }}
>    22 :     </script>
>    23 : </body>
>    24 : 
>    25 : 
> 
> Traceback (most recent call last):
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\urls\base.py", line 71, in reverse
>     extra, resolver = resolver.namespace_dict[ns]
>                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
> During handling of the above exception ('the_django_plotly_dash'), another exception occurred:
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
>     response = get_response(request)
>                ^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
>     response = wrapped_callback(request, *callback_args, **callback_kwargs)
>                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\src\myapp\views.py", line 9, in dash_view
>     return render(request, 'myapp/plotly_dash/dash_template.html', context= {"moninstance" : 5})
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\shortcuts.py", line 25, in render
>     content = loader.render_to_string(template_name, context, request, using=using)
>               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\loader.py", line 62, in render_to_string
>     return template.render(context, request)
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\backends\django.py", line 107, in render
>     return self.template.render(context)
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 171, in render
>     return self._render(context)
>            ^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 163, in _render
>     return self.nodelist.render(context)
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 1008, in render
>     return SafeString("".join([node.render_annotated(context) for node in self]))
>                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\base.py", line 969, in render_annotated
>     return self.render(context)
>            ^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\template\library.py", line 258, in render
>     _dict = self.func(*resolved_args, **resolved_kwargs)
>             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django_plotly_dash\templatetags\plotly_dash.py", line 101, in plotly_app
>     da, app = _locate_daapp(name, slug, da, cache_id=cache_id)
>               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django_plotly_dash\templatetags\plotly_dash.py", line 58, in _locate_daapp
>     da, app = DashApp.locate_item(name, stateless=True, cache_id=cache_id)
>               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django_plotly_dash\models.py", line 231, in locate_item
>     app = dash_app.as_dash_instance(cache_id=cache_id)
>           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django_plotly_dash\dash_wrapper.py", line 230, in as_dash_instance
>     return self.do_form_dash_instance(cache_id=cache_id)
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django_plotly_dash\dash_wrapper.py", line 265, in do_form_dash_instance
>     ndid, base_pathname = self.get_base_pathname(specific_identifier, cache_id)
>                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django_plotly_dash\dash_wrapper.py", line 257, in get_base_pathname
>     full_url = reverse(app_pathname, kwargs=kwargs)
>                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "C:\Users\Antunes Sebastien\Desktop\Dashboard\hop\.env\Lib\site-packages\django\urls\base.py", line 82, in reverse
>     raise NoReverseMatch("%s is not a registered namespace" % key)
>     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
> Exception Type: NoReverseMatch at /dash/
> Exception Value: 'the_django_plotly_dash' is not a registered namespace

Gabriel Trouvé

Mentor

Je t'ai fait le formatage.

Tu n'as pas oublié l'url du coup ?

urlpatterns = [
    ...
    path('django_plotly_dash/', include('django_plotly_dash.urls')),
]

Bonjour ,

effectivement , il me manquait

urlpatterns = [
    ...
    path('django_plotly_dash/', include('django_plotly_dash.urls')),
]

et il me manquait aussi

# X-Frame-Options indiquer par la doc officielle
X_FRAME_OPTIONS = 'SAMEORIGIN'

Dans mon fichier settings.py .
Mea culpa , je ne sais pas bien lire les documentations .L'idéal serait que les documentations soient transformées en supports vidéos concrets .
En tout cas coté django-dash-plotly, c'est bon ...

Maintenant , je peux commencer à coder l'application dash avec mon fichier dash_app.py et ne plus me soucier de codage en HTML coté template .

Pour l'instant , j'aie mon dropdown qui s'est chargé mais pas le graphique en barres .

Je vais cherché de mon coté , investiguer la documentation dash et plotly et je cloture ce post .

Merci monsieur !...

Pas de soucis c'est normal :)

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.