2012-04-13 78 views
1

我已經繼承了需要使用自定義模板過濾器進行修改的Django應用程序。對於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  

正如你所看到的,我添加了一個「名稱=主要」部分,讓我跑它處於獨立模式,只是爲了檢查該特定文件中是否存在錯誤,並且在獨立模式下運行時沒有問題。

基於別人的建議,我也嘗試將其導入到另一個文件,只是爲了查看是否有導入錯誤,並再次,如果我將它添加到settings.py的結尾是好的(在使用開發服務器):

嘗試: 進口mlgb.templatetags.mlgb_custom_filters 除例外,EXC: 打印 '錯誤導入mlgb_custom_filters' 打印EXC

此外,INSTALLED_APPS settings.py中包括線'mysite.mlgb',並且我也嘗試在那裏放置'mlgb'而不是'mysite.mlgb',至今另一個人建議。每當我做出改變時,我都會重新啓動開發者服務器。

我想我已經嘗試過我在網上發現的每一個建議,直到現在。有沒有人有任何新想法?這是否與我繼承了一個目錄結構有關,即模板目錄與應用程序不在同一個結構中,即它不在mysite之下?在這裏刮取桶的想法!我希望有人能幫幫忙。

+1

嗯......有什麼例外? – 2012-04-13 15:31:00

+0

嗨,開發服務器給我這些錯誤開始: 文件「/usr/lib/python2.5/site-packages/django/core/servers/basehttp.py」,行280,在運行 self.result =應用程序(self.environ,self.start_response) 文件「/usr/lib/python2.5/site-packages/django/core/servers/basehttp.py」,第674行,在__call__中 return self.application(environ, start_response) 文件「/usr/lib/python2.5/site-packages/django/core/handlers/wsgi.py」,第241行,在__call__中 response = self.get_response(request) File「/ usr/lib /python2.5/site-packages/django/core/handlers/base.py「,第141行,在get_response – 2012-04-13 15:48:47

+0

更好地把錯誤放在問題 – okm 2012-04-13 16:02:25

回答

0

感謝我的同事Masud Khokhar的幫助,我現在可以發表自己的問題的答案,他的輝煌的偵探工作挽救了這一天。回顧一下,我的應用程序工作正常,直到我爲我的模板文件中的一個添加了「加載」語句,以加載「自定義過濾器」模塊。 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。

+0

Masud還建議,不要硬編碼模板文件的路徑,我應該使用os.path來從相對路徑生成它。最後,我使用了settings.py中的TEMPLATE_DIRS值,即''template_name':'%smlgb/mlgb_detail.html'%settings.TEMPLATE_DIRS' – 2012-04-16 13:50:18

+0

事實上,事實證明我並不需要做所有這些改變路徑。只需要確保我對.py文件所做的更改正在獲取。已經嘗試刪除.pyc文件並手動重新編譯,再加上重新啓動apache,沒有喜悅。但後來終於做到了「觸摸人們在其他帖子中提到的wsgi文件」。最初我的問題是,我不知道這個wsgi文件居住在哪裏!最後我找到了它。我的項目位於名爲'mysite'的目錄下,我有一個名爲'mlgb'的應用程序。我不得不碰到的文件在/ mysite/mlgb/apache下,被稱爲mlgb.wsgi。 – 2012-04-17 13:58:08

2

好的,在我剛開始發佈這個問題時,似乎我實際需要做的只是觸摸我的appname/apache目錄下的wsgi文件來強制刷新應用程序。昨天的初步答案是一條紅鯡魚。基本上我應該碰到文件myproject/myapp/apache/myapp.wsgi。那麼可能重新啓動Apache以達到更好的效果但混亂的原因是顯然僅僅是重新啓動Apache或手動重新編譯Python是不夠的。爲了提取我的更改,似乎需要觸摸該wsgi文件。然後一切都很好。

相關問題