Django渲染似乎没有将字典传递给模板

时间:2015-02-18 11:13:20

标签: python html django templates render

更新:我通过卸载并重新安装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;没有传递给模板。我没有收到任何错误。

4 个答案:

答案 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)