django: filtre invalide
J'ai reçu un article d'application et d'essayer de faire un filtre personnalisé, j'ai un répertoire appelé templatetags dans l'article de l'app, et un tags.py dans ce répertoire, voici la structure de répertoire.
-manage.py(f)
-settings.py(f)
-articles(d)
- templatetags(d)
- tags.py(f)
Sur les modèles, les articles de disposer de son propre répertoire, tous les modèles d'articles étendre à partir d'un base.html modèle, voici la structure du modèle.
-base.html(f)
-articles(d)
-index.html(f)
Je charge les balises dans base.html {% load tags %} et utiliser le filtre personnalisé dans index.html et a obtenu le non valide erreur de filtre.
tags.py
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter
@stringfilter
def space2Dash(s):
return s.replace(' ', '_');
Je n'arrive pas à comprendre ce que j'ai fait de mal.
edit:
J'ai changé le nom du filtre à abcfilter.py
et j'ai l'application de l'article chargés dans mon settings.py
articles/index.html
{% load abcfilter %}
{{ "foo bar"|space2dash }}
l'erreur:
Request Method: GET
Request URL: http://localhost:8080/articles/
Django Version: 1.2.5
Exception Type: TemplateSyntaxError
Exception Value:
Invalid filter: 'space2dash'
Exception Location: ***/lib/python2.7/django/template/__init__.py in find_filter, line 363
Python Executable: /usr/local/bin/python
Python Version: 2.7.1
Server time: Sun, 10 Apr 2011 07:55:54 -0500
source d'informationauteur vito huang
Vous devez vous connecter pour publier un commentaire.
D'abord, enlever le point-virgule après votre foyer.
Avez-vous un fichier appelé
__init__.py
(c'est supposer 2 souligne avant et après l'init, dur au format de l'éditeur.) en vertu de la templatetags répertoire?Ici est une bonne page avec beaucoup d'infos si vous n'avez pas regardé encore.
http://docs.djangoproject.com/en/dev/howto/custom-template-tags/
Juste pour la référence, j'ai résolu le problème en déplaçant le
à partir de la base modèle pour le béton modèle.
Voir aussi ce post https://stackoverflow.com/a/10427321/3198502
J'ai été presque aller de noix à ce problème et aucune des réponses ci-dessus aidé.
Si vous avez plusieurs applications, assurez-vous que les noms de fichier contenant vos étiquettes personnalisées/filtres sont uniques, prefereably
app_name_filters.py
. Sinon Django charge uniquement les filtres personnalisés à partir de l'app il trouve de la correspondance de premier!