更新:我通过卸载并重新安装Python / Django来修复它。不确定出了什么问题。
我正在尝试使用渲染(也尝试使用render_to_response)将字典中的值打印到html模板,但它似乎并没有起作用。 HTML模板无法识别我尝试传递给它的任何值。
Django代码
def search(request):
context = RequestContext(request)
results2= [{'link':12, 'title':34, 'summary':56}, {'link':121, 'title':341, 'summary':561}]
print results2 #is printed in command prompt, so this function is working
return render_to_response('home.html', {'results2': results2}, context)
#tried using render as well
HTML模板
{% extends "base.html" %}
{% load staticfiles %}
<form class="form-signin span8" id="user_form" method="post" action="">
{% csrf_token %}
<!-- Display the search form elements here -->
<input type="text" size="50" name="query" value="" id="query" />
<input class="btn btn-primary" type="submit" name="submit" value="Search" placeholder="Put Search"/>
<br />
</form>
<p>{{results2}}</p>
<p>test1</p>
<p>{{link}}</p>
<p>test2</p>
<div style="clear: both;">
<ol>
{% for result in results2 %}
<li>
<strong><a href="{{ result.link }}">{{ result.title }}</a> </strong><br />
<em>{{ result.summary }}</em>
</li>
{% endfor %}
</ol>
</div>
在服务器运行并且调用该功能的命令提示中,它打印了&#39;结果2&#39;因此功能“搜索”&#39;绝对是有效的。但是,变量似乎不会呈现。
查看呈现页面的来源(相当于上面的内容):
<form class="form-signin span8" id="user_form" method="post" action="">
<input type='hidden' name='csrfmiddlewaretoken' value='Y4PfA0x8jH67jWUlTJfjbMzk0EAouPrp' />
<!-- Display the search form elements here -->
<input type="text" size="50" name="query" value="" id="query" />
<input class="btn btn-primary" type="submit" name="submit" value="Search" placeholder="Put Search"/>
<br />
</form>
<p></p>
<p>test1</p>
<p></p>
<p>test2</p>
<p>test2</p>
<div style="clear: both;">
<ol>
</ol>
</div>
所以字典列表&#39;结果2&#39;没有传递给模板。我没有收到任何错误。
答案 0 :(得分:0)
看起来你的模板希望results2是一个dicts列表,而你通过一个dict。尝试类似render_to_response('home.html', {'results2': [results2, ]}, context)
答案 1 :(得分:0)
这是否仅适用于此模板,并且所有其他模板都正常运行?如果没有,请检查您的设置文件。确保已定义TEMPLATE_CONTEXT_PROCESSORS。看起来应该是这样的......
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
'django.core.context_processors.request',)
除此之外,我没有看到代码有任何其他问题。
答案 2 :(得分:0)
你在运行什么版本的Django?如果它是1.8,那么上下文处理器就被移动了:
在Django 1.8中更改:
在Django 1.8中,内置模板上下文处理器已从 django.core.context_processors 移至 django.template.context_processors 。
因此,在您的设置文件中TEMPLATE_CONTEXT_PROCESSORS
下,它应如下所示:
(
"django.contrib.auth.context_processors.auth",
"django.template.context_processors.debug",
"django.template.context_processors.i18n",
"django.template.context_processors.media",
"django.template.context_processors.request",
"django.template.context_processors.static",
"django.template.context_processors.tz",
"django.contrib.messages.context_processors.messages"
)
答案 3 :(得分:-1)
尝试改变你的返回语句,
return render_to_response('home.html', {'results2': results2}, context_instance = context)