【发布时间】:2013-12-16 01:19:25
【问题描述】:
我尝试在 Django 1.6 中制作自己的分配模板标签(编辑:我也尝试了 1.5.5 没有成功)但我无法让它做任何事情。
在templatetags/getattribute.py 我有:
from django import template
import logging
register = template.Library()
logger = logging.getLogger('wwwcid.website.debug_console')
#@register.assignment_tag
def mytag(context, context_variable):
raise template.TemplateSyntaxError("buuuuuuuuuuuuuuus")
logger.debug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
print "teeeeeeeeeeeeeeeeeeeest"
return 'tpppppppppppppppppppppeee'
register.assignment_tag(mytag, takes_context=True)
在我的模板profile.html 我有:
{% extends "website/base.html" %}
{% load getattribute %}
{% mytag "user.email" as vari %}
{{ vari }}
{% block content %}
<p> Rest of the page. </p>
{% endblock content %}
但是这个标签不起作用。没有引发错误(即使我自己提出),没有日志输出,没有打印,没有返回,什么都没有。
即使我在不带take_context=True 的情况下注册标签,只说@register.assignment_tag 它也不起作用。我在这里做错了什么?感谢您的帮助!
【问题讨论】:
-
我假设上述模板 sn-p 中的错字(关闭
}%而不是%})实际上并不存在于您的模板中,并且templatetags目录是应用程序的一部分那是settings.INSTALLED_APPS? -
感谢拼写错误(已修复),实际代码中不存在该错误。是的,我实际上在同一个
getattribute.py文件中有一个工作过滤器.. getattribute 过滤器。 -
如何获得更多关于正在发生的事情的调试输出?问题实际上是它什么都不做。
-
settings.TEMPLATE_DEBUG可能是起点,如果您还没有打开它(以及它需要的settings.DEBUG设置)。我也可以尝试将import pdb; pdb.set_trace()调用放入标记代码中,然后运行开发服务器 - 如果曾经执行过标记代码,它应该放入调试器中。 -
settings.DEBUG = True 和 settings.TEMPLATE_DEBUG = DEBUG 已设置。感谢 pdb 提示,但不幸的是,这永远不会执行。
标签: django django-templates django-1.5 django-1.6