2011-05-23 79 views
2

我想在web应用程序之外使用Django模板库。我可以传递上下文变量来构造一个html文档。我有加载模板并构造html数据的python代码。当我尝试运行该脚本时,出现以下错误:如何在Web应用程序之外加载Django模板?

raise InvalidTemplateLibrary("Template library %s does not have a variable named 'register'" % module_name) 
django.template.InvalidTemplateLibrary: Template library django.template.loader_tags does not have a variable named 'register' 

如何解决此问题?

我已验证以下所有模板都在我指定的TEMPLATE_DIRS目录中。下面我Python代码给出:

def LoadAndRenderTemplate(self, template_name, 
          items_to_be_rendered, blank_row=''): 
    """Loads and renders the django template. 

    Args: 
     template_name: template path relative to TEMPLATE_DIRS 
     items_to_be_rendered: items to be rendered 
     blank_row: string flag value having permissible values 'odd' and 'even' 
       responsible for rendering BLANK_ODD_ROW and BLANK_EVEN_ROW 
       if the flag value is 'odd' and 'even' respectively. 

    Returns: 
     safe representation of html output 
    """ 
    loaded_template = django_dep.loader.get_template(template_name) 
    context = django_dep.template.Context({'report_date': self.report_date, 
            'blank_row': blank_row, 
            'items': items_to_be_rendered}) 
    return loaded_template.render(context) 

基本模板(base.html文件)

 {% block body %}{% endblock %} 
     {% block odd_even_row %} 
     {% ifequal blank_row "odd" %} 
     <!-- BLANK ODD ROW --> 
     <tr style=width:100&#37;;font-weight:bold;background-color:#FFFFFF; 
      font-size:11px;> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
     </tr> 
     {% endifequal %} 
     {% ifequal blank_row "even" %} 
     <!-- BLANK EVEN ROW --> 
     <tr style=width:100&#37;;background-color:#EEEEEE;font-size:11px;> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
     </tr> 
     {% endifequal %} 
     {% endblock %} 

顶部模板

  {% extends "base.html" %} 
     {% block body %} 
     <html> 
      <head></head> 
      <body style=font-family:arial;> 
      <ul> 
      <li>Dashboard</li> 
      </ul><h3 style=color:#3366CC;>Student List as of {{ report_date }}</h3> 
      <table style=border-collapse:collapse;background-color:#EEEEEE> 
       <tr style=width:100&#37;;font-weight:bold;background-color: 
       #E5ECF9;color:#3366CC;font-size:10px;> 
       <td style=width:4em;>First Name</td> 
       <td style=width:100em;>Last Name</td>  
       </tr> 
      </table> 
      </body> 
      </html> 
      {% endblock %} 

有没有办法做到这一点?

+0

为了模板可维护性和HTML有效负载大小,您应该将元素样式切换为CSS类。 {%cycle%}模板标签还可以让您减少模板的“奇怪”“甚至”部分(http://docs.djangoproject.com/en/1.3/ref/templates/builtins/#cycle) – Manfre 2011-05-24 15:17:59

回答

1

我试图重现你的错误,没有运气。这是(http://pastebin.com/k116mbXC)在django应用程序之外呈现模板的简单脚本(基于您的代码)。适用于Django 1.3。