Résolue

Espace administrateur + petite question fichier 'static'

# Fichiers # Django # CSS

Hello !

Je suis sur un petit projet site vitrine et j'essai de rendre tout le site administrable. ( faire mon wordpress maison si je puis le formuler ainsi ).

Par exemple sur la page d'accueil nous avons un titre et texte d'introduction qui peu être amené à étre modifier dans le futur. Il y aura toujours qu'un titre et qu'un texte, si un administrateur supprime celui-ci pour modifier le texte le gabarit ne le retrouvera plus dans la BDD. ( je l'appel avec introText = get_object_or_404(IntroText, pk=2) )Donc le pk changera à chaque fois ( si une mauvaise manipulation est effectué en supprimant au lieu de modifier )

Donc existe-il une manière de créer un espace plus adapter dans l'espace adminisatration de Django? Ou faut-il se concentré sur des conditions qui imposerai le comportement de l'espace administration ?( j'espere avoir réussi à être clair dans mon explication ^^ )

Au sujet des fichiers static j'ai éssayé de plusieurs manière d'integrer une typographie particulière. Mais dans le fichier style, pour les URLs de la typo j'ai essayé de plusieurs manière sans y parvenir. Quelle astuce faut-il employer pour intégrer une police exterieur ?

Merci d'avance, bonne journée !

Yann

Hello Yann !

Pour ton intro, un moyen de contourner ça dans le panneau d'administration Django serait peut être de créer un modèle qui n'autorise qu'une seule instance. Ainsi, tes administrateurs peuvent le modifier, mais ils ne pourront pas le supprimer et en créer un autre. Un truc du genre dans ta méthde save qui permet de checker le nombre d'instance.

if TonModele.objects.count() <= 1

Du coup c'est plus ta deuxime idée que je conseillerais : "se concentré sur des conditions qui imposerai le comportement de l'espace administration". Tu ne ferai que de la modification de ton champs et tu iterdis la supression et la création de plus que 1

Sur la partie typo pas sûr d'avoir compris ta question mais j'essaye: si tu as une police que tu veux intégrer, tu peux le faire de la même manière que n'importe quel fichier CSS. Assure-toi simplement que ton fichier de polices est dans ton dossier static, et ensuite, dans ton fichier CSS, utilise @font-face pour importer la police. Par exemple :

@font-face {
  font-family: "MaSuperPolice";
  src: url('/static/fonts/MaPolice.woff2') format('woff2'),
       url('/static/fonts/MaPolice.woff') format('woff');
}

Et ensuite, tu peux utiliser cette police comme tu le ferais normalement :

body {
  font-family: "MaSuperPolice", sans-serif;
}

j'espère que ça t'aide ?

A +

Merci pour ton retour rapide, pour ma première question j'ai pris le problème dans un autre sens. J'ai trouvé une solution plus simple les autorisations de Django en créant des utilisateurs avec les droits restreints (comme interdire de supprimé le texte d'intro ^^ mais il peu le modifier). Mais je suis curieux de voir ta solution car je ne percois pas comment interdire à un superutilisateur la suppréssion d'un article j'ai commencé à le rédiger pour essayer mais je ne sais pas quoi écrire ^^. Voici mon model :

class IntroText(models.Model):
    title = models.CharField(max_length=30, unique=True, verbose_name="Titre intro")
    content = models.TextField(blank=True, verbose_name="Contenu intro")

    class Meta:
        verbose_name = "Text Intro"

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        if IntroText.object.count() <= 1 :


        super().save(*args, **kwargs)

Si je peux avoir un exemple de ce que tu avais en tête !

Et pour les fichiers static je pensais qu'il fallait utiliser {% static 'url' %} même dans le fichier style.css et du coup avec un chemin d'accès direct cela a fonctionné. ( j'avais essayé mais sans le /static/ erreur de chemin )

Merci pour ton aide !

Salut Yann,

Pour le premier point, dans ta méthode save, tu dois vérifier si une instance existe déjà. Si c'est le cas, tu récupères cette instance et tu mets à jour ses champs. Sinon tu crées une nouvelle instance. Un truc du genre peut être à tester:

def save(self, *args, **kwargs):
    if IntroText.objects.count() > 0:
        existing_instance = IntroText.objects.first()
        existing_instance.title = self.title
        existing_instance.content = self.content
        super(IntroText, existing_instance).save(*args, **kwargs)
    else:
        super().save(*args, **kwargs)

Ainsi si un superuser tente de créer une nouvelle instance, elle mettra à jour l'instance existante au lieu de créer une nouvelle. A ajuster peut être désolé je n'ai pas testé.

Merci pour ton retour, je comprend le principe je vais essayer tout sa !

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.