Django模板未完全渲染上下文
我在使用Django的模板时遇到了一个问题,Context没有被正确显示。meta_k是空的,而meta_description却不是。
t = get_template('projects.html')
html = t.render(Context({
'completed': completed,
'current':current,
'description': sp.description,
'project_title':sp.name,
'img':images,
'meta_desc': sp.meta_description,
'meta_k:': sp.meta_keywords
}))
我可以在Eclipse中以调试模式启动服务器,所以我知道sp.meta_keywords并不是空的。下面是我在projects.html中调用代码的地方:
{% block meta_keywords %}<br>
{% if meta_k %}<br>
{{ meta_k }}<br>
{% else %}<br>
Venkat, Rao, engineer, inventor, entrepreneur, projects, blue dart, control systems, labview<br>
{% endif %}<br>
{% endblock %}
这里默认走的是else分支,而我明明知道meta_k不应该是空的。完整的代码可以在这里找到。
我哪里做错了呢?
2 个回答
3
我给你的建议是,你的代码里很可能有个错误。我们要想帮你找出问题,但不运行你的整个项目的话会很难。
所以我建议你在命令行上试试看,看看能不能用简单的步骤重现这个错误,这样我们才能尝试修复它。我相信在这个过程中你会找到出问题的地方。
比如,我看到你的模板在我简单的环境下渲染得很好。
>>> from django.template import Context, Template
>>> s = """{% block meta_keywords %}<br>
... {% if meta_k %}<br>
... {{ meta_k }}<br>
... {% else %}<br>
... Venkat, Rao, engineer, inventor, entrepreneur, projects, blue dart, control systems, labview<br>
... {% endif %}<br>
... {% endblock %}"""
>>> t = Template(s)
>>> c = Context({'meta_k':['a','b','c']})
>>> t.render(c)
u'<br>\n<br>\n ['a', 'b', 'c']<br>\n<br>\n'
-1
我刚才犯了个低级错误:
在我的渲染文件里,我写了:
html = t.render(Context({'completed': completed, 'current':current, 'description': sp.description, 'project_title':sp.name, 'img':images, 'meta_desc': sp.meta_description, 'meta_k:': sp.meta_keywords)
这里的“this”指的是“meta_k:” 注意那个分号
而在我的模板里,我写的是:
{% if meta_k %}
注意没有分号
如果我把分号去掉,它就能正常工作了。真是个傻事。