Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django模板不呈现完整的上下文_Python_Django_Google App Engine - Fatal编程技术网

Python django模板不呈现完整的上下文

Python django模板不呈现完整的上下文,python,django,google-app-engine,Python,Django,Google App Engine,我正在使用django的模板。我遇到了一个无法呈现上下文的问题。元k为空。元描述不是 t = get_template('projects.html') html = t.render(Context({ 'completed': completed, 'current':current, 'description': sp.description, 'project_title':sp.name, 'img

我正在使用django的模板。我遇到了一个无法呈现上下文的问题。元k为空。元描述不是

 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_关键字不为空。下面是我在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 %}
{%block meta_keywords%}
{%if meta_k%}
{{meta_k}}
{%else%}
Venkat,Rao,工程师,发明家,企业家,项目,蓝镖,控制系统,labview
{%endif%}
{%endblock%}
当我知道meta_k不应为null时,这默认为else。完整的代码可以在谷歌代码中找到


我做错了什么?

对您的唯一建议是,很可能是代码中的错误,对于我们来说,如果不运行整个项目,就很难进行调试

因此,我建议您在命令行上进行实验,看看是否可以通过简单的步骤复制错误,以便我们可以尝试修复它。我相信在这个过程中,你会发现有问题的部分

e、 g.我看到您的模板通过我的简单上下文正确呈现

>>> 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'
>>来自django.template导入上下文,模板
>>>s=“”{%block meta_关键字%}
…{%if meta_k%}
…{{meta_k}}
…{%else%}
…文卡特、饶、工程师、发明家、企业家、项目、蓝镖、控制系统、labview
…{%endif%}
…{%endblock%}”“” >>>t=模板 >>>c=上下文({'meta_k':['a','b','c']}) >>>t.render(c) u'
\n
\n[';a&';,';b&';,';c&';]
\n
\n
所以我犯了个愚蠢的错误:

在渲染文件中,我有:

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)
这是指“meta_k:注意分号

在模板中,我有

{% if meta_k %}
注意不要用分号


如果我删除分号,它就会工作。这太愚蠢了。

如果结果是空字符串或空列表,或者Python中的任何计算结果为
False
,包括
None
,它将进入else部分。我知道结果不是空的或没有,因为我在“监视”窗口中看到变量的值,很可能是代码中的错误,然后在django中,可以尝试将sp传递给context并在projects.html中打印出值,这样就可以确定会出现什么值了吗?可以显示一个独立的django代码来描述问题并可以在命令行上运行吗?如果您尝试这样做,您会发现问题,或者我们会看到错误,所以我这样做并可以工作:html=t.render(context({sp':sp}))然后在project.html中,我将其更改为:{%if sp%}{{sp.meta_关键字}{%else%}Venkat、Rao、工程师、发明家、企业家、项目、蓝镖、控制系统、labview{%endif%},这可能是因为:
{%if meta k%}
分支未执行意味着meta_k以某种方式评估为假,要么meta_k为空,要么某个对象的计算结果为false,请尝试传递“%s”%sp.meta_关键字,然后查看结果主要是什么,这就是为什么如果您尝试简化问题并确定问题所在的区域,最终您会找到原因,否则,盯着一堆复杂的代码思考似乎是django中的一个bug并没有帮助