尝试将Django自定义筛选器加载到模板时出错

时间:2012-04-13 15:24:40

标签: django django-templates django-template-filters

我继承了一个需要使用自定义模板过滤器修改的Django应用程序。我是Django的新手,我对它很神秘。我认为我已完全按照说明操作,并且还遵循了有关该主题的其他帖子的所有建议,但是当我在模板中包含以下行时仍然出现错误:

{% load mlgb_custom_filters %}

我的目录结构如下:

mysite (i.e. the project)    
    __init__.py    
    mlgb/ (i.e. the app)    
      __init__.py    
      templatetags/    
          __init__.py    
          mlgb_custom_filters.py    

mlgb_custom_filters.py的代码如下:

from django import template    
from django.template.defaultfilters import stringfilter    
register = template.Library()    
@register.filter(name='fix_dashes')    
@stringfilter    
def fix_dashes( value ):    
    return value.replace( '--', 'DASH' )    
if __name__ == "__main__":    
    testvar = fix_dashes( "ouch -- ow -- I hate django" )    
    print testvar    

正如你所看到的,我添加了一个'name = main'部分让我在独立模式下运行它,只是为了检查该特定文件中没有错误,并且在独立模式下运行时没问题。

根据其他人的建议,我也尝试将其导入另一个文件,只是为了查看是否存在导入错误,再一次,如果我将其添加到settings.py的末尾就可以了。使用开发服务器):

尝试:     import mlgb.templatetags.mlgb_custom_filters 除了异常,exc:     打印'错误导入mlgb_custom_filters'     print exc

此外,settings.py中的INSTALLED_APPS包含'mysite.mlgb'这一行,我还尝试将'mlgb'替换为'mysite.mlgb',正如另一个人所建议的那样。每次我做出改变时,我都会重新启动开发服务器。

我想我已经尝试过我在网上找到的每一个建议,直到现在。有没有人有任何新想法?这可能与我继承了一个目录结构的事实有关,其中模板目录与应用程序不在同一个结构中,即它不在mysite下?在这里刮取桶子的想法!我希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:2)

好的,在我第一次发布这个问题的情况下,似乎我真正需要做的就是触摸wsgi目录下的appname/apache文件以强制刷新应用程序。昨天最初的答案是红鲱鱼。基本上我应该触摸文件myproject/myapp/apache/myapp.wsgi。然后可能重新启动Apache以获得良好的衡但是混淆是由于显然仅仅重启Apache或手动重新编译Python是不够的。为了获取我的更改,似乎我需要触摸该wsgi文件。一切都很好。

答案 1 :(得分:0)

在我的同事Masud Khokhar的帮助下,我现在可以回答我自己的问题,他的精彩侦探工作挽救了这一天。回顾一下,我的应用程序工作正常,直到我向我的一个模板文件添加'load'语句,以加载'自定义过滤器'模块。 Masud确定现在我需要使用urls.py中的模板文件的完整/绝对路径,而不是像以前那样使用相对的路径(之前有效,直到需要加载自定义过滤器模块)。所以,在urls.py中,我有一段代码如下:

 url(r'^book/(?P<object_id>\d+)/$', 'list_detail.object_detail',
     kwargs={
        'queryset':Book.objects.all(),
        'template_name' : 'mlgb/mlgb_detail.html'
     },
     name='mlgb_detail'
 ),

而不是:

        'template_name' : 'mlgb/mlgb_detail.html'

我需要这样的东西:

        'template_name' : '/THE_FULL_PATH/mlgb/templates/mlgb/mlgb_detail.html'

做出改变 - 排序!再次感谢Masud。