2014-06-22 3 views
0

Je suis bloqué avec la classe RegexValidator. J'essaie d'autoriser la saisie de certaines balises HTML (p, ul, li) dans un champ de caractères. Le Regex suivant fait exactement ce dont j'ai besoin mais j'ai du mal à l'implémenter.Django RegexValidator Ne fonctionne pas comme prévu

<\/?(?!p|ul|li)[^/>]*> 

Je suis en train de implment dans mon modèle Django de la façon suivante:

 description = models.CharField(max_length = 255, validators=[ 
             RegexValidator(
              regex = r'<\/?(?!p|ul|li)[^/>]*>', 
              message = 'Disallowed Tags', 
              code = 'DISALLOWED_TAGS', 
             ), 
            ], 
           ) 

J'utilise Django 1.6. Lorsque j'implémente le code ci-dessus, il semble que toutes les soumissions de formulaire (Using Admin Interface) échouent à la validation.

Des idées?

Merci

+0

Je pense que votre expression rationnelle est fausse. Essayez d'entrer quelque chose comme '' – MoiTux

+0

Merci MoiTux. J'ai testé cette regex sur REGEXR et il ne semble pas être défectueux. – Herm

+0

Juste pour être clair, ce qui précède voit aussi une chaîne normale ex. "Test", comme étant invalide. – Herm

Répondre

1

faire votre gagné validateur et si le match rexep jeter une erreur car il ne doit pas être autorisé.
here plus d'infos sur le validateur.

import re 
from django.core.exceptions import ValidationError 

def test(val): 
    if re.match('<\/?(?!p|ul|li)[^/>]*>', val): 
     raise ValidationError('Disallowed Tags') 

class Foo(models.Model): 
    name = models.CharField(max_length = 150, validators=[test]) 
+0

Merci beaucoup. Cela fonctionne comme un charme sur mes CharFields et TextFields. Essayé de l'utiliser sur l'éditeur TinyMCE (content = tinymce_models.HTMLField (validators = [check_for_invalid_html_tags])), mais ne semble pas avoir le même résultat. Une idée de pourquoi cela pourrait être? – Herm

+0

Je ne connais pas vraiment l'éditeur TinyMCE, mais il pourrait encoder les entités HTML. – MoiTux

+0

Cela ne semble pas être le cas. Je l'ai testé en changeant mon REGEX à [0-9] et en tapant une valeur numérique. N'a pas déclenché un message de validation. Quoi qu'il en soit, je continuerai à tester et mettre à jour quand je trouverai une solution. – Herm

Questions connexes