Django 自定义模板标记函数未调用
模板代码:Django 自定义模板标记函数未调用,django,django-templates,Django,Django Templates,模板代码: {% extends 'some.html' %} {% load tag %} {% get_rate land contDetails.postcode contDetails.county title uid LsAff.aff_id LsAff.group_id %} 自定义模板标记: from django import template from process.utils.error_handler import debug_logger from djang
{% extends 'some.html' %}
{% load tag %}
{% get_rate land contDetails.postcode contDetails.county title uid LsAff.aff_id LsAff.group_id %}
自定义模板标记:
from django import template
from process.utils.error_handler import debug_logger
from django.template import Library, Node, TemplateSyntaxError
class land(template.Node):
def __init__(self, var):
self.varname = template.Variable(var)
debug_logger().info(self.varname)
def render(self, context):
debug_logger().info("hello")
user = self.varname.resolve(context)
debug_logger().info("hello")
debug_logger().info(user)
return "somestring"
def get_rate(parser, token):
debug_logger().info("hell")
bits=token.split_contents()
var=bits[2]
debug_logger().info(var)
return land(var)
register = template.Library()
register.tag('get_rate', get_rate)
在上述代码中,def render(self,context):函数未调用。
直到debug_logger().info(self.varname)语句,代码才能正常工作
我遗漏了什么吗?
请帮助找到调用render(self,context)的解决方案。我设置了一个快速查看功能并复制了您的标记。为了简洁起见,我将参数的数量减少到了两个。对我来说一切正常
#views.py
from django.shortcuts import render
def test_view(request):
return render(request, 'test.html', {'var' : True})
#tag.py
from django import template
register = template.Library()
@register.tag('get_rate')
def get_rate(parser, token):
bits = token.contents.split()
var = bits[2]
return LandNode(var)
class LandNode(template.Node):
def __init__(self, var):
self.varname = template.Variable(var)
def render(self, context):
varname = self.varname.resolve(context)
return 'some string'
#test.html
{% load tag %}
{% get_rate 'foo' var %}
呈现:
some string
我建议减少模板标记上的方法签名,只传入要传入多个对象属性的对象。您能添加模板代码吗?还有其他错误信息吗?可能会添加整个错误?@cwoebker我没有收到任何错误,它不会返回任何内容。在调试时,我发现渲染函数没有被调用。好吧,现在我明白你的意思了,抱歉,现在太早了,我会查看一下,看看是否找到任何内容