Projet

Général

Profil

Development #8521

Autoriser plusieurs pages à avoir le même slug

Ajouté par Frédéric Péters il y a plus de 8 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Bas
Assigné à:
-
Version cible:
-
Début:
06 octobre 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Pour le moment les slugs à l'intérieur d'un site doivent être uniques, ça pourrait avoir du sens de lever cette restriction; par exemple pour avoir /etat-civil/contact/, /famille/contact/, etc.


Fichiers


Demandes liées

Lié à Combo - Development #23535: Gestion "sous-page automatique"Fermé02 mai 2018

Actions

Révisions associées

Révision d349635d (diff)
Ajouté par Frédéric Péters il y a plus de 5 ans

misc: allow page with same slug but different parents (#8521)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

    class Meta:
        unique_together = (('parent', 'slug'),)

Il reste un problème, ça ne marche pas si parent est nul (pour Postgres (NULL, 'xxx') != (NULL, 'xxx'), donc pour toutes les pages à la racine. Le seul moyen de contourner est d'ajouter la contrainte à la main via une migration SQL (qui marche par contre sous sqlite et postgres) du style CREATE UNIQUE INDEX ON table (slug) WHERE parent_id IS NULL;. Si besoin je peux donner le code exact que j'ai dans authentic.

#2

Mis à jour par Frédéric Péters il y a plus de 5 ans

En prenant l'option de ne pas introduire de contrainte côté db, ni de chercher des optimisations au schéma (hello mptt), sur l'idée que l'ui gère, que la hiérarchie est peu profonde et que je préfère limiter les migrations, particulièrement manuellement modifiées.

#3

Mis à jour par Frédéric Péters il y a plus de 5 ans

Je pensais que ce code m'aiderait pour ensuite faire #23535 mais pas vraiment, dans cet autre ticket je réécris le code de recherche de page. Ce patch reste intéressant mais la partie dans combo/public/views.py peut tout à fait être ignorée.

#4

Mis à jour par Frédéric Péters il y a plus de 5 ans

#5

Mis à jour par Thomas Noël il y a plus de 5 ans

  • Statut changé de Solution proposée à Solution validée

Je suis pas très à l'aise avec la partie hashlib, parce c'est pas garanti à 100% et parce que hashlib.md5(1) ça ressemble à "caca" (oui, bon).

J'aurai plutôt vu un truc plus classique genre

while new_slug in other_pages_slugs:
   n += 1
   new_slug = moved_page.slug + '-%d' % n

Mais en même temps, même si deux pages ont le même slug ça va pas tout faire planter combo... ah mais si, object.get(slug=slug)... Bon, on peut attendre 30 ans avant que ça arrive, allez, go.

#6

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)

Pour info 8243 donnera caca.

commit d349635d07a2f7ff95830eea7d01caa5302dd024
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Wed Aug 8 17:21:15 2018 +0200

    misc: allow page with same slug but different parents (#8521)
#7

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF