Coder Social home page Coder Social logo

numerique-gouv / django-dsfr Goto Github PK

View Code? Open in Web Editor NEW
26.0 26.0 10.0 20.09 MB

Intégration du système de design de l'État français dans Django

Home Page: https://numerique-gouv.github.io/django-dsfr/

License: Other

Python 59.73% HTML 26.36% Makefile 0.32% JavaScript 6.60% Shell 0.10% CSS 4.24% SCSS 2.65%
django hacktoberfest open-collectivites

django-dsfr's People

Contributors

ash-crow avatar b-alica avatar chaibax avatar christophehenry avatar dependabot[bot] avatar mjeammet avatar qleroy avatar sebastienreuiller avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

django-dsfr's Issues

Il n'est pas possible de mettre un lien sur le composant Carte

En utilisant le tag dsfr_card, le lien n'est pas dans le HTML généré.

Exemple d'utilisation :

{% dsfr_card title=subblock.value.title description=subblock.value.description link=subblock.value.url image_url=img.url %}

Dans le code généré, le href est vide :
<a href="" target="_self">

Créer un DsfrModelForm et déprécier la combinaison de ModelForm et DsfrBaseForm

D'après un commentaire de @christophehenry sur #83 :

Ok, je comprends le problème. Ça vient de la façon de mélanger les ModelForm et DsfrBaseForm. ModelForm.default_renderer() prend le pas sur DsfrBaseForm.default_renderer().

Selon moi, il faudrait déprécier cette méthode en faveur d'un DsfrModelForm dans une version majeure, ce qui crérait moins de risque d'erreur avec la résolution des ancêtres.

Mais si cette solution est écartée, il faudrait au moins remplacer:

TEMPLATES = [
    {
        [...]
        "DIRS": [
            os.path.join(BASE_DIR, "dsfr/templates"),
            os.path.join(BASE_DIR, "templates"),
        ],
    },
]

par :

INSTALLED_APPS = [
    ...
    "widget_tweaks"
    "dsfr",
    "django.forms",
    <votre_app>
]

dans la documentation pour se rendre conforme avec la documentation Django.

Problème d'affichage du label des cases à cocher

Concernant, le tag {% dsfr_form_field %}, lorsqu'une case à cocher est présentée seule, elle est affichée avant le libellé, conformément au DSFR. Cependant, dans ce contexte, les ":" (deux points) qui suivent habituellement le libellé sont quand même affichés après le libellé, ce qui peut sembler incohérent. Pour rendre l'interface plus logique et cohérente, il serait préférable de ne pas afficher les ":" lorsque le type d'input est une case à cocher. Ainsi, cela correspondrait mieux à l'affichage de la case à cocher avant le libellé.

Ce qui est affiché actuellement :
numerique-gouv github io_django-dsfr_form_example_ (1)

<div class="fr-checkbox-group">
    <input type="checkbox" name="sample_boolean" id="id_sample_boolean" />
    <label for="id_sample_boolean" class="fr-label">
        <label for="id_sample_boolean">Cochez la case&nbsp;:</label>
    </label>
</div>

Ce qui devrait être idéalement affiché :
numerique-gouv github io_django-dsfr_form_example_ (2)

<div class="fr-checkbox-group">
    <input type="checkbox" name="sample_boolean" id="id_sample_boolean" />
    <label for="id_sample_boolean" class="fr-label">
        <label for="id_sample_boolean">Cochez la case</label>
    </label>
</div>

Buttons

Hello,

Currently it is not possible to add a name to a button.
I suggest to add this possibility, thus the dictionary for the button would look like that :

BTN_SUBMIT = {
        "label": "Soumettre",
        "onclick": "",
        "type":"submit",
        "extra_classes": ".........",
        "name": ".........",
    }

Is it possible ? Should I make a pull request ?

Thank you !

Rendre le modèle DsfrConfig internationalisable

Il faudrait :

  • Ajouter un champ pour le code langue, et faire en sort qu'il n'y ait qu'une DsfrConfig par code langue
  • Faire en sorte que le context_processor renvoie la configuration dans la langue sélectionnée si elle existe, ou, à défaut, la première.

Moving this repo elsewhere

Hi, I was thinking of moving this repo elsewhere to make easier adding new contributors that are not currently members of EIG. Not sure where though. Betagouv? Its own org?

Migrer code normatif depuis example_app à DSFR (Architecture)

Il y a un défaut d’architecturalement que j'estime important. Le code pour l'exécution normale de l'application se trouve trop dans le dossier example_app. Ceci pose un problème important d'unifomalité et d'automatismes de transpositions / traductions (traductions au sens propre).

Faisons en sorte que DSFR (devrait-il être django_dsfr au fait, y compris dans templates et static ?) reprennent le code de example_app qui n'a pas besoin d'être dans example APP. Je pense par exemple à Search.

Ajouter les nouvelles variations sur les composants Tuile et Carte

Cf. notes de version de la version 1.10.0 du DSFR :

✨ Tuile : plusieurs variations sur deux tailles, SM et MD avec le rajout d’une icône optionnelle, par défaut une flèche.

✨ Téléchargement de fichier :

🎉 Nouvelle variation disponible : Tuile de téléchargement
✨ Évolution de la variation Carte anciennement appelé “Bloc de téléchargement” avec la possibilité d’y inclure un média au ratio 3:4 ou 4:3 et de pouvoir afficher des tags ou badges.

Mise à jour du DSFR à v1.10.1 et documenter le processus de mise à jour pour les contribs

La version actuelle du DSFR est 1.10.1. La version embarquée dans django-dsfr est 1.9.2 soit 3 versions de retard. Il serait bien aussi de documenter ce qu'il faut faire lors de la mise à jour d'une nouvelle version du DSFR. De ce que j'ai vu dans le code, il ne suffit pas de bouger le dist du DSFR dans dsfr/static/dsfr/dist. J'ai l'impression qu'il faut aussi mettre les les hash d'intégrité à jour et faire tourner la commande trim_dist ?

Ajouter les composants suivants dans le cadre de la refonte de numerique.gouv.fr

Liste des composants demandés dans le cadre de la refonte de numerique.gouv.fr (à créer complètement, ou du moins ajouter les options manquantes)

  • Badge
  • Carte
  • Citation
  • Contenu média
  • Header
  • Fil d'ariane
  • Gestionnaire de consentement
  • Lettre d'information et Réseaux Sociaux (follow)
  • Lien
  • Menu latéral (side menu)
  • Mise en avant : développer toutes les mises en avant
  • Mises en exergue
  • Navigation principale
  • Onglets
  • Partage
  • Tag
  • Téléchargement de fichier : carte de téléchargement + lien de téléchargement
  • Transcription
  • Champ de saisie  (pour les inscriptions notamment)

Déprecier {% dsfr_form %} pour Django 4.0+

Django 4.0 a introduit l'API Form rendering qui rend {% dsfr_form %} obselète. Je propose de modifier {% dsfr_form %} pour lever une notice de dépreciation à partir de Django 4.0+ et supprimer le support dans la prochaine majeure et supprimer totalement la balise quand il sera décidé de laisser tomber le support de Django<4.0.

Documentation

Pourquoi ne pas positionner la documentation (actuellement example_app si j'ai bien compris) dans le répertoire doc qui sert à ça d'habitude ?

TemplateDoesNotExist on admin login

TemplateDoesNotExist on admin login

What happened ?

Created a superuser. Upon trying to reach /admin/login/?next=/admin/, I get :

image

I'm working on Django-template with python 3.9.6, Django==4.1.7 and django-dsfr==0.12.0 (same issue with 0.14.0)

Commenting FORM_RENDERER = "django.forms.renderers.TemplatesSetting" in settings allows me to reach the page.

Déprécier Django 3.x et python < 3.10

(à faire en rentrant de vacances en août)

Le support de Django 3.2 LTS s'est achevé en avril, il faut donc le retirer des versions supportées dans le README.rst, le pyproject.toml et la CI.

Django 4+ supporte uniquement Python 3.10+, il faut donc aussi retirer le support des versions 3.8 et 3.9 de Python.

Forms

Hello,

I had to make forms with django-dsfr and I encountered several difficulties to make them. Indeed {{ form.as_p }} didn't render the form with the dsfr, and {% dsfr_input ... %} meant that we had to create each field separately without using a form class in forms.py.

I worked on a form_base.html file that could be useful to everyone to work more easily on forms with django-dsfr. It is a file that extends your base.html and is used by extending it in your form templates.
This file require a dependency : widget-tweaks. I suggest that it is added in django-dsfr.
I have also modified the widget templates : checkbox_option.html, input_option.html, multiple_input.html and radio_option.html.

Using these, it is possible to create a form class in forms.py, use it in a view class, and your form template would just look like this :

{% load static dsfr_tags %}

{% block head-form %}
    <h2>Test de formulaire</h2>
{% endblock head-form %}

{% block foot-form %}
    {% dsfr_button btn_submit %}
{% endblock foot-form %}

Let me know if it's ok with you to pull a request ?
Thank you

Problème avec dsfr_alert

Bonjour,

Je rencontre un problème au niveau des dsfr_alert. Après avoir bien fouillé avec des collègues, nous pensons (sans être sûrs) que le problème vient d'une boucle javascript quelque part qui aurait une erreur.

Le problème : lorsque je mets un {% dsfr_alert foo %} dans un template, l'alerte ne s'affiche pas. Pourtant elle existe bien, elle est présente dans le code html de la page, mais il manque à la div du message la classe "fr-collapse--expanded" ainsi que "style="--collapse-max-height: none; --collapse: -44px;". En rajoutant à la main dans l'inspecteur cette classe et ce style dans la div, le message s'affiche bien.
Mon html :
image

Le rendu sur la page : rien

Ce que je vois dans l'inspecteur :
image
(l'alerte existe mais elle ne s'affiche pas)

En rajoutant à la main ce qu'il faut :
image

Le rendu sur la page :
image
(l'alerte s'affiche désormais).

Plus étrange encore : Si je mets DEUX FOIS mon alerte, comme ceci :
image
(Deux fois exactement la même)

Le rendu :
image
(L'alerte n'apparait qu'une seule fois)

Ce qu'on voit sur l'inspecteur :
image

Les deux alertes existent dans le code, mais seule la première a reçu la classe fr-collapse--expanded et le style qui convient, pas la deuxième.

C'est ce qui nous fait penser qu'il doit y avoir une boucle quelque part qui ajoute la classe fr-collapse--expanded à toutes les div de message, mais avec une erreur de type commencer à 1 plutôt que 0.

Savez-vous ce qui peut causer ça ? Rencontrez-vous le même problème ?

A savoir que j'utilisais une ancienne version de django-dsfr (0.11.1) et mon code marchait sans problème en ne mettant qu'une seule fois {% dsfr_alert message.message|to_dict %}. C'est depuis que j'ai fait la mise à jour vers django-dsfr 0.16.2 que j'ai ce bug.
J'espère que ma description du problème est claire, ce n'est pas facile à expliquer.

Je vous remercie,

Cordialement.

Support all supported versions of Django

At the moment, Django 3.2.x and Django 4.0.x are supported by the Django project. It would be nice to be able to use django-dsfr with Django 4.0.x.

Happy to try and submit a PR but I'm not yet sure how to change pyproject.toml and the github action to make sure the CI tests both branches.

Introduire un paramètre d'informations suppmémentaires dans le template des champs

Le design du DSFR permet d'introduire des informations supplémentaires sous un champs, comme pour le champ mot de passe sur ce formulaire. Malheureusement, Field ne fourni aucun paramètre qui permette d'avoir ces infos.

3 solutions possibles :

  1. documenter un champ Field.additionnal_field_infos à utiliser comme suit :
    class ExampleForm(DsfrBaseForm):
        field = TextInput()
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self["field"].additionnal_field_infos = mark_safe(
                '<p class="fr-message fr-message--info">12 caractères minimum</p>'
            )
  2. utiliser form.field[""].widget.attr :
    class ExampleForm(DsfrBaseForm):
        field = TextInput(widget=Widget(attrs={
            "additionnal_field_infos": mark_safe(
                '<p class="fr-message fr-message--info">12 caractères minimum</p>'
            )
        })) 
    
        def __init__(self, *args, **kwargs):
           # Ou alors
            self["field"].widget.attrs["additionnal_field_infos"] = mark_safe(
                '<p class="fr-message fr-message--info">12 caractères minimum</p>'
            )
            super().__init__(*args, **kwargs)
  3. déclarer un membre additionnal_field_infos pour la classe DsfrBaseForm qui s'utiliserait comme suit :
      class ExampleForm(DsfrBaseForm):
        field = TextInput()
        additionnal_field_infos = {
            "field": mark_safe(
                '<p class="fr-message fr-message--info">12 caractères minimum</p>'
            )
        }

Aucune solution n'est vraiment satisfaisante.

  1. oblige à toujours écrire un __init__ et peut être incompréhensible si la personne écrit self["field"] (qui contient le Field) au lieu de self.fields["field"] (qui contient le BoundField correspondant).

  2. mélange des informations sur les attributs HTML avec des informations sur le widget, ce qui est contre-intuitif, oblige à surcharger le paramètre widget du Field ou écrire un __init__.

  3. a ma préférence, même si elle n'est pas très Djangonique. L'idéal serait un membre dans la classe Meta mais seule ModelForm a une classe Meta.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.