Bonjour,
J'ai développé une application que j'ai ensuite deployé. Jusque là pas de soucis. Mais par la suite, j'ai fait évolué cette application et lors de la mise a jour de l'application déployée, j'ai plusieurs "TemplateSyntaxError : Invalid filter" qui sont apparues à l'utilisation de filtre personnalisé Il n'y avait aucun problème dans l'environnement de dev django, mais surtout, j'utilisais deja des filtres custom dont certains sont dans les memes fichiers que les nouveaux qui ne sont pas reconnus. Mes filtres se trouvent dans utils.templatetags.extras. utils est bien déclaré dans le fichier settings et extras contient d'autres filtres qui eux sont reconnus et ne provoquent pas d'erreur. En Dev, j'utilise Linux avec Django. En prod, c'est un serveur Windows 7 avec Apache 2.4 et MySQL 5.6 (avec python 2.7.8 partout) J'ai essayé d'importer et d'essayer mes filtres manuellement avec le shell de django sur le serveur de production, tout fonctionne parfaitement. En debuggant, je me suis rendu compte que Django ne passe pas dans le fichier de mes filtres et n'execute donc pas register=template.Library() En utilisant add_to_builtins() dans urls.py par exemple, le filtre est bien importé.
L'arborescence:
1 2 3 4 5 6 7 8 9 10 11 12 | |project |ism -__init__.py -settings.py (contient ism.utils) |utils -__init__.py |templatetags -__init__.py -extras.py |templates |site -list.html (contient {% load extras %}) |
Voila l'erreur exacte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | Environment: Request Method: GET Request URL: http://localhost:8000/ism/sites/list Django Version: 1.6 Python Version: 2.7.8 Installed Applications: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_extensions', 'south', 'ism.core', 'ism.supervision', 'ism.utils') Installed Middleware: ('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', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware') Template error: In template C:\Apache\project\templates\site\list.html, error at line 31 Invalid filter: 'at_least_one_have_alert' 21 : 22 : 23 : {% block content %} 24 : 25 : {% if site_groups %} 26 : <div class="panel-group" id="sites_list"> 27 : {% for site_group in site_groups %} 28 : <div class="panel panel-default"> 29 : <div class="panel-heading"> 30 : <h4 class="panel-title" style="width:50%;"> 31 : {% if site_group.site_set.all|at_least_one_have_alert %} 32 : <span 33 : class="glyphicon glyphicon-bell text-danger" 34 : title="{% trans 'At least one site in this group have a unacquired alert' %}"> 35 : </span> 36 : {% else %} 37 : <span 38 : class="glyphicon glyphicon-bell text-success" 39 : title="{% trans 'no site in this group have a unacquired alert' %}"> 40 : </span> 41 : {% endif %} Traceback: File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 139. response = response.render() File "C:\Python27\lib\site-packages\django\template\response.py" in render 105. self.content = self.rendered_content File "C:\Python27\lib\site-packages\django\template\response.py" in rendered_content 80. template = self.resolve_template(self.template_name) File "C:\Python27\lib\site-packages\django\template\response.py" in resolve_template 56. return loader.select_template(template) File "C:\Python27\lib\site-packages\django\template\loader.py" in select_template 180. return get_template(template_name) File "C:\Python27\lib\site-packages\django\template\loader.py" in get_template 138. template, origin = find_template(template_name) File "C:\Python27\lib\site-packages\django\template\loader.py" in find_template 127. source, display_name = loader(name, dirs) File "C:\Python27\lib\site-packages\django\template\loader.py" in __call__ 43. return self.load_template(template_name, template_dirs) File "C:\Python27\lib\site-packages\django\template\loader.py" in load_template 49. template = get_template_from_string(source, origin, template_name) File "C:\Python27\lib\site-packages\django\template\loader.py" in get_template_from_string 149. return Template(source, origin, name) File "C:\Python27\lib\site-packages\django\template\base.py" in __init__ 125. self.nodelist = compile_string(template_string, origin) File "C:\Python27\lib\site-packages\django\template\base.py" in compile_string 153. return parser.parse() File "C:\Python27\lib\site-packages\django\template\base.py" in parse 278. compiled_result = compile_func(self, token) File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in do_extends 215. nodelist = parser.parse() File "C:\Python27\lib\site-packages\django\template\base.py" in parse 278. compiled_result = compile_func(self, token) File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in do_block 190. nodelist = parser.parse(('endblock',)) File "C:\Python27\lib\site-packages\django\template\base.py" in parse 278. compiled_result = compile_func(self, token) File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in do_if 942. nodelist = parser.parse(('elif', 'else', 'endif')) File "C:\Python27\lib\site-packages\django\template\base.py" in parse 278. compiled_result = compile_func(self, token) File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in do_for 806. nodelist_loop = parser.parse(('empty', 'endfor',)) File "C:\Python27\lib\site-packages\django\template\base.py" in parse 278. compiled_result = compile_func(self, token) File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in do_if 941. condition = TemplateIfParser(parser, bits).parse() File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in __init__ 874. super(TemplateIfParser, self).__init__(*args, **kwargs) File "C:\Python27\lib\site-packages\django\template\smartif.py" in __init__ 163. mapped_tokens.append(self.translate_token(token)) File "C:\Python27\lib\site-packages\django\template\smartif.py" in translate_token 174. return self.create_var(token) File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in create_var 877. return TemplateLiteral(self.template_parser.compile_filter(value), value) File "C:\Python27\lib\site-packages\django\template\base.py" in compile_filter 360. return FilterExpression(token, self) File "C:\Python27\lib\site-packages\django\template\base.py" in __init__ 571. filter_func = parser.find_filter(filter_name) File "C:\Python27\lib\site-packages\django\template\base.py" in find_filter 366. raise TemplateSyntaxError("Invalid filter: '%s'" % filter_name) Exception Type: TemplateSyntaxError at /sites/list Exception Value: Invalid filter: 'at_least_one_have_alert' |
En vous remerciant d'avance.