Quiero un menú personalizado según el grupo al que pertenece. Estoy usando Django 1.10.1, allauth y así sucesivamente. Cuando intento crear mi etiqueta de plantilla, falla y dice: ¨
TemplateSyntaxError at /
'my_templatetag' is not a registered tag library. Must be one of:
account
account_tags
admin_list
admin_modify
admin_static
admin_urls
cache
i18n
l10n
log
socialaccount
socialaccount_tags
static
staticfiles
tz
'my_templatetag.py' se ve así:
from django import template
from django.contrib.auth.models import Group
register = template.Library()
@register.filter(name='has_group')
def has_group(user, group_name):
group = Group.objects.get(name=group_name)
return group in user.groups.all()
y ese error viene en mi archivo .html que dice,
{% load my_templatetag %}
Intenté reiniciar el servidor como millones de veces, también intenté cambiar todos los nombres y la aplicación es parte de INSTALLED_APPS en settings.py. ¿Qué estoy haciendo mal?
django
django-allauth
templatetags
Sliljedal
fuente
fuente
Desde django 1.9, puede cargar esas nuevas etiquetas / filtros en configuraciones como esta:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'app.apptemplates.load_setting', ], 'libraries':{ 'my_templatetag': 'app.templatetags.my_templatetag', } }, },
]
fuente
Asegúrese de no perderse ninguno de los siguientes pasos:
Cree una carpeta llamada "templatetags" al mismo nivel que models.py y views.py en la carpeta de su aplicación
Su aplicación debe estar en INSTALLED_APPS en settings.py
La carpeta templatetags debe tener __init__.py
Reinicia el servidor django
fuente
default_app_config = 'custom_admin.apps.Config'
. De lo contrario, Django 1.10 no carga etiquetas de plantilla. Sin embargo, no veo esto explícitamente en los documentos.__ini__.py
, pero ¿sabes por qué solía funcionar en Python3 pero no en Python2?En mi caso, el problema era que estaba usando
{% load filter_method_name %}
Tuve que cambiar a
{% load filename %}
Luego tuve que reiniciar el servidor.
fuente
¿Dónde se almacena 'my_templatetag.py'? Debe almacenarse en un directorio llamado 'templatetags' que se encuentra dentro de la aplicación.
Consulte: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/ si ese no es el caso.
fuente
Reinicie el servidor django. Me funcionó después de configurar la carpeta templatetag dentro de la aplicación y template_name.py en la carpeta templatetag.
fuente
En caso de que ayude a alguien, el problema en mi caso fue que estaba usando comillas al intentar cargar la (s) etiqueta (s)
{% load 'my_templatetag' %} <!-- incorrect -->
en vez de
{% load my_templatetag %} <!-- correct -->
Nota:
extends
necesita comillas alrededor del nombre del archivo, pero noload
fuente
tienes que detener manualmente el servidor de desarrollo e iniciarlo de nuevo, para que Django pueda identificar las nuevas etiquetas de plantilla
fuente
Estoy usando Django 1.11 y estaba teniendo el mismo problema. Algunas de las respuestas aquí son correctas, pero es posible que falten algunas cosas. Aquí esta lo que hice:
Citando a un usuario anterior:
Pero, antes de reiniciar el servidor Django, agregue esto al archivo que contiene las etiquetas:
from django import template register = template.Library()
Luego, puede reiniciar el servidor.
fuente
Sé que esto es un poco antiguo, pero hoy me encontré con el mismo problema. Encontré la solución en los documentos: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
Simplemente copiando el __init__.py desde otra ubicación en el directorio de la nueva etiqueta de plantilla lo solucionó.
fuente
Resolví esto agregando una carpeta templatestag en la raíz con un archivo filter.py que define mis filtros, luego ajusté mi settings.py .
Verifique mi respuesta completa con respecto a este problema en este hilo similar
fuente
ponga my_templatetag.py dentro de app_name / templatetags y luego cree init .py dentro de app_name / templatetags .. Luego abra el terminal en la carpeta del proyecto y dé el comando python manage.py shell
fuente
simplemente corta / elimina el código que está escrito dentro de (ejemplo templatetags / home.py) de home.py, elimina tu código y reinicia tu servidor y vuelve a pegar tu código en home.py, funcionará.
fuente
Yah, este problema al que se enfrenta actualmente debido a la versión anterior de django o complejo para escribir "Depreciación"
si tiene estos tipos de etiquetas en su plantilla / archivos html, cámbielas con ..
> {{% load staticfiles %} or {% load admin_static %}, {% load > admin_static %}}
cambiar con
{% load static %}
Vaya al grano .. JUst SIMPLEMENTE REALICE ESTOS Sustituya todos estos de SU BAse.html / o cualquier tipo de HTML
fuente
en primer lugar, detenga el servidor, quite / corte el código de templatetags / tag.py y vuelva a escribirlo / péguelo, luego ejecute el servidor.
fuente