我继承了一个需要使用自定义模板过滤器修改的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下?在这里刮取桶子的想法!我希望有人可以提供帮助。
答案 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。