【问题标题】:custom template tag function not calling自定义模板标签函数未调用
【发布时间】:2011-10-13 03:04:09
【问题描述】:

模板代码:

{% 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) 的解决方案

【问题讨论】:

  • 你能添加你的模板代码吗?
  • 还有其他错误信息吗?也许添加整个错误?
  • @cwoebker 我没有得到任何错误它没有返回任何东西。在调试时我发现渲染函数没有被调用。
  • 好吧,我明白你的意思了,抱歉,早上太早了,我看看有没有发现

标签: django django-templates


【解决方案1】:

我设置了快速查看功能并复制了您的标签。为简洁起见,我将参数的数量减少到两个。对我来说一切正常。

#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

我建议减少该模板标签上的方法签名,只在您传递多个对象属性的地方传递对象。

【讨论】:

    猜你喜欢
    • 2019-12-30
    • 2019-11-16
    • 2013-05-30
    • 1970-01-01
    • 2016-02-25
    • 2015-01-20
    • 2017-07-29
    • 2021-07-13
    相关资源
    最近更新 更多