ism*_*ail 10 django django-templates django-custom-tags
我目前正在编写一些自定义模板标签,但由于某种原因它们无法加载.我的目录结构如下:
MyProj
|
----MyApp
|
|----templatetags
|
|----myapp_tags.py
|----__init__.py
Run Code Online (Sandbox Code Playgroud)
在myapp_tags.py中
from django.template import Library, Node
from myproj.myapp.models import Product
register = Library()
class LatestProductsNode(Node):
def render(self, context):
context['recent_products'] = Product.objects.all()[:5]
return ''
def get_latest_products(parser, token):
return LatestProductsNode()
get_latest_products = register.tag(get_latest_products)
Run Code Online (Sandbox Code Playgroud)
在settings.py中
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'myproj.myapp',
)
Run Code Online (Sandbox Code Playgroud)
在模板中
{% load myapp_tags %}
Run Code Online (Sandbox Code Playgroud)
尝试加载页面时出现的错误:
Exception Type: TemplateSyntaxError Exception Value:
'myapp_tags' is not a valid tag library: Could not load template library from django.templatetags.myapp_tags, No module named myapp_tags
Run Code Online (Sandbox Code Playgroud)
juj*_*ule 15
在settings.py中,你永远不应该明确地命名项目'myproj'.在INSTALLED_APPS
,只需使用'myapp'.另外,你应该这样:
TEMPLATE_LOADERS = (
'django.template.loaders.app_directories.load_template_source',
)
Run Code Online (Sandbox Code Playgroud)
并确保__init__.py
在myapp
文件夹中以及中templatetags
.
manage.py shell
然后使用from myapp.templatetags import myapp_tags
以查明myapp_tags.py文件中是否存在任何python错误.
另外,请确保myapp_tags.py文件名与项目中的其他文件夹/文件不冲突.
希望这可以帮助.
Dan*_*ead 14
让我感到震惊的一件事是,模板标签的神奇导入绕过了开发服务器的自动重新加载.如果以下工作manage.py shell
>>> from django.templatetags import myapp_tags
>>>
Run Code Online (Sandbox Code Playgroud)
然后一切都在工作,你只需要重新加载开发服务器.另一方面,如果你得到一个ImportError
错误的东西,你应该检查你的INSTALLED_APPS
,你在templatetags目录中有一个__init__.py文件,在其他答案中建议了所有其他的东西.
这可能只适用于遇到模板标签加载问题的人中的一小部分,但这是我第二次在这个问题中出现这么多周而且两次都只是重新启动开发服务器以使工作正常.
归档时间: |
|
查看次数: |
17909 次 |
最近记录: |