【问题标题】:Django custom assignment_tag does not get executedDjango 自定义 assignment_tag 未执行
【发布时间】: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


【解决方案1】:

好的,我应该将代码粘贴到我的应用程序中。我编辑了上面的 profile.html 部分以反映实际情况。问题是标签和变量只在{% block foo %} 和{% endblock foo %} 之间执行。因此,使用以下profile.html 模板即可:

{% extends "website/base.html" %}
{% load getattribute %}
{% block content %}
{% mytag "user.email" as vari %}
{{ vari }}
<p> Rest of the page. </p>
{% endblock content %}

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 2021-03-09
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多