Django模板未完全渲染上下文

-1 投票
2 回答
2614 浏览
提问于 2025-04-16 04:54

我在使用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>
&nbsp;&nbsp;&nbsp;&nbsp;{{ meta_k }}<br>
{% else %}<br>
&nbsp;&nbsp;&nbsp;&nbsp;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>
... &nbsp;&nbsp;&nbsp;&nbsp;{{ meta_k }}<br>
... {% else %}<br>
... &nbsp;&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;&nbsp;[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]<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 %}

注意没有分号

如果我把分号去掉,它就能正常工作了。真是个傻事。

撰写回答