【问题标题】:django template does not render complete contextdjango 模板不呈现完整的上下文
【发布时间】:2010-10-03 03:35:46
【问题描述】:

我在 django 中使用模板。我遇到了未呈现上下文的问题。 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 %}

当我知道 meta_k 不应该为空时,这默认为 else。完整的代码可以在 Google Code 上找到here

我做错了什么?

【问题讨论】:

  • 如果结果是一个空字符串或空列表,或者任何在Python中计算结果为False的东西,包括None,都会进入else部分。
  • 我知道结果不是空的或无,因为我在监视窗口中看到变量的值
  • 很可能是你的代码有错误,然后在 django 中,可以尝试将 sp 传递给 context 并打印出 projects.html 中的值,这样你就可以确定会出现什么值?
  • 你能否展示一个描述问题并可以在命令行上运行的独立 django 代码,如果你尝试这样做,你会发现问题,或者我们会看到错误
  • 所以我这样做并且它有效: html = t.render(Context({'sp': sp})) 然后在 project.html 我将其更改为: {% if sp %} { { sp.meta_keywords}} {% else %} Venkat,Rao,工程师,发明家,企业家,项目,blue dart,控制系统,labview {% endif %},这行得通

标签: python django google-app-engine


【解决方案1】:

对您的唯一建议是,这很可能是您的代码中的错误,对我们而言,如果不运行您的整个项目,将很难进行调试。

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

例如我看到我的简单上下文正确呈现了您的模板

>>> 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'

【讨论】:

  • 可能的原因:{% if meta_k %} 分支没有被执行意味着 meta_k 以某种方式评估为 False,meta_k 为空或评估为 false 的对象,尝试传递 "%s"%sp.meta_keywords而是看看结果如何
【解决方案2】:

所以我只是犯了愚蠢的错误:

在我的渲染文件中:

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 %}

注意不要分号

如果我删除分号,它会起作用。那是愚蠢的。

【讨论】:

  • 是的,大部分是这样,这就是为什么如果你试图让问题变得更简单,并找出问题所在的区域,最终你会找到原因,否则盯着一堆复杂的代码和思考就像django 中的错误无济于事
猜你喜欢
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2021-08-17
  • 2019-08-01
  • 2017-03-13
相关资源
最近更新 更多