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

尝试将Django自定义筛选器加载到模板时出错,django,django-templates,django-template-filters,Django,Django Templates,Django Template Filters,我继承了一个Django应用程序,需要使用自定义模板过滤器对其进行修改。我对Django完全是新手,对此我感到很困惑。我认为我已经完全按照说明进行了操作,也遵循了其他帖子关于该主题的所有建议,但当我在模板中包含以下行时,我仍然会出错: {% load mlgb_custom_filters %} 我的目录结构如下: mysite (i.e. the project) __init__.py mlgb/ (i.e. the app) __ini

我继承了一个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    
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    
 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'
 ),
mlgb_custom_filters.py的代码如下:

mysite (i.e. the project)    
    __init__.py    
    mlgb/ (i.e. the app)    
      __init__.py    
      templatetags/    
          __init__.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    
 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'
 ),
正如您所看到的,我添加了一个“name=main”部分,让我在独立模式下运行它,只是为了检查该特定文件中是否存在错误,并且在独立模式下运行时没有问题

根据其他人的建议,我还尝试将其导入到另一个文件中,只是为了查看是否存在导入错误,并且再次强调,如果我将此添加到settings.py的末尾(在使用dev服务器时),也可以:

尝试: 导入mlgb.templatetags.mlgb\u自定义\u筛选器 除例外情况外,exc: 打印“导入mlgb\u自定义\u筛选器时出错” 打印exc

另外,settings.py中安装的_应用程序包括“mysite.mlgb”一行,我还尝试将“mlgb”而不是“mysite.mlgb”放在那里,正如另一个人所建议的那样。每次进行更改时,我都会重新启动dev服务器


我想我已经尝试了我在网上找到的每一个建议,直到现在。有人有什么新想法吗?这是否与我继承了一个目录结构有关,其中模板目录与应用程序不在同一个结构中,即它不在mysite下?在这里寻找灵感!我希望有人能帮上忙。

多亏了我的同事马苏德·霍哈尔的帮助,我现在可以发布我自己问题的答案,他出色的侦探工作挽救了这一天。总而言之,我的应用程序运行良好,直到我在一个模板文件中添加了一个“load”语句,以加载一个“CustomFilters”模块。Masud发现,现在我需要在url.py中使用模板文件的完整/绝对路径,而不是像以前那样使用相对路径(在需要加载自定义过滤器模块之前,该路径一直有效)。因此,在urls.py中,我有一段代码如下:

mysite (i.e. the project)    
    __init__.py    
    mlgb/ (i.e. the app)    
      __init__.py    
      templatetags/    
          __init__.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    
 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' : '/THE_FULL_PATH/mlgb/templates/mlgb/mlgb_detail.html'

作出了改变-排序!再次感谢你,马苏德。

好的,在我第一次发布这个问题时的情况下,我实际上需要做的就是触摸我的
appname/apache
目录下的
wsgi
文件,强制刷新应用程序。昨天的初步答案是转移注意力。基本上,我应该触及文件
myproject/myapp/apache/myapp.wsgi
。然后重新启动Apache好吗?但造成这种混乱的原因是,显然仅仅重启Apache或手动重新编译Python是不够的。为了获取我的更改,似乎我需要触摸wsgi文件。然后一切都好了。

hi,开发服务器给了我这些错误,开始是:文件“/usr/lib/python2.5/site packages/django/core/servers/basehttp.py”,第280行,运行self.result=application(self.environ,self.start\u response)文件“/usr/lib/python2.5/site packages/django/core/servers/basehttp.py”,第674行,在调用返回self.application(environ,start_response)文件“/usr/lib/python2.5/site packages/django/core/handlers/wsgi.py”的第241行,在调用响应=self.get_response(请求)文件“/usr/lib/python2.5/site packages/django/core/handlers/base.py”的第141行,在get_responsebetter中,通过半个回溯将错误放入问题中。这正是我一直想要的。而且,即使是异常类型,发布的trackback也不会在项目中命中一行!完全可调试。@SueB:如果你有回溯,一定要在你的问题中完整地发布。永远不要说“我犯了个错误”。Masud还建议,与其硬编码模板文件的路径,不如使用os.path从相对路径生成模板文件。最后,我使用了settings.py中TEMPLATE_DIRS的值,即
“TEMPLATE_name”:“%smlgb/mlgb_detail.html”%settings.TEMPLATE_DIRS
,事实证明我不需要做所有的路径更改。只是需要确保我对.py文件所做的更改被接受。已经尝试删除.pyc文件并手动重新编译,再加上重新启动apache,但毫无乐趣。但后来终于做到了人们在其他帖子中提到的“触摸wsgi文件”。最初我的问题是我不知道这个wsgi文件在哪里!我终于找到了。我的项目在一个名为“mysite”的目录下,在这个目录下我有一个名为“mlgb”的应用程序。我必须接触的文件位于/mysite/mlgb/apache下,名为mlgb.wsgi。