2015-02-23 58 views
1

我有一個python項目,我使用Django模板來生成C++源代碼。如何定義自定義過濾器以最小化django模板的使用?

我選擇了Django是因爲模板語言的限制性很強,並且有一個非常大的社區,使最終用戶開發人員可以輕鬆地使用和獲取幫助。

我無法爲我的項目添加自定義過濾器(將一組類型名稱轉換爲另一個類型名稱),因爲我沒有完成正常的django設置。

相反:

from django.template import Context, Template 
import django 

if not django.conf.settings.configured : django.conf.settings.configure() 
django.setup() 

讓我用Django模板完美,但不能定義自定義過濾器。

我的自定義過濾器被稱爲ctypes_filters.py,我引用它的模板

{% load ctypes_filters %} 

以下錯誤運行我的生成腳本結果:

django.template.base.TemplateSyntaxError: 'ctypes_filters' is not a valid tag library: Template library ctypes_filters not found, tried 

django.templatetags.ctypes_filters 

我怎樣才能到的Django找到沒有設置完整的Django項目(數據庫定義等)的過濾器?

我知道其他模板解決方案可供選擇(和可能更輕質的),但我真的很熱衷於使用Django的簡單和優雅的模板。

回答

1

Django的模板標籤的位置按照慣例而不是配置設置(見模板標籤文檔的code layout部分)完成。

ctypes_filter.py置於已安裝應用程序的templatetags目錄中(我在此稱其爲myapp)。向myapptemplatetags目錄中添加一個空的__init__.py。該應用程序不需要您可能在Django應用程序中常見的任何其他文件,如models.pyviews.py

myapp/ 
    __init__.py 
    templatetags/ 
     __init__.py 
     ctypes_filter.py 

然後在您的INSTALLED_APPSmyapp配置您的設置時。

django.conf.settings.configure(
    INSTALLED_APPS=('myapp',), 
) 
+0

看起來不錯。我仍然收到一個錯誤,可能是因爲它不在cwd中查看: 'django.template.base.TemplateSyntaxError:'ctypes_filter'不是有效的標記庫:找不到模板庫ctypes_filter,嘗試過django.templatetags.ctypes_filter ,django_apps.templatetags.ctypes_filter」 – jbcoe 2015-02-24 01:52:41

+0

我添加django_apps/templatetags/ctypes_filter.py和創建兩個目錄中的空__init__.py。現在按要求工作。 謝謝。 – jbcoe 2015-02-24 02:07:30

相關問題