django - render_to_response - 渲染了一些东西

时间:2013-03-20 22:27:50

标签: django templates django-templates django-views

这是一个非常简单的问题,但我无法理解。

我有一个视图,它获取一行,然后在其上调用render_to_response。但是我想在模板中添加一些其他东西以供显示,而这些东西并非来自数据库。我只是无法解决如何做到这一点,我在文档中找不到涵盖这种情况的任何内容。

如果我只是传递数据库获取的结果 - 表单被渲染等等,一切都会正常工作。一旦我介绍了其他一些东西,我要么得到500(如下例所示)或者它只是得到完全被忽略了。

(我在下面显示的示例中正在处理的内容是django教程'民意调查'应用程序的一种变异,如果某些命名看起来有些奇怪,请道歉

查看

除了BookMark对象,我还添加了一些仲裁数据,在我的例子中是一个字符串'test title'。

def detail(request, bookmark_id):
    try:
        b = BookMark.objects.get(pk=bookmark_id)
        d = {'title' = 'test title'}
    except Poll.DoesNotExist:
        raise Http404
    return render_to_response(  'bookmarks/bookmark_detail.html',
            {'bookmark': b, 'title': d},
                                context_instance=RequestContext(request))

BASE TEMPLATE

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>{% block title %}Default Title from base.html{% endblock %}</title>
    </head>
    <body>
        <div id="topstuff">
            <h1>This is top stuff</h1>
        </div>
        <div id="content">
            {% block content %}{% endblock %}
        </div>
        <div id="bottomstuff">
            <h1>This is bottom stuff</h1>
        </div>
    </body>
</html>

内部模板

{% extends "base.html" %}

{{ bookmark }}


{% block title %}{{ title.title }}{% endblock title %}

{% block content %}

    <h1>{{ poll.question }}</h1>

    {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

    <form action="/polls/{{ poll.id }}/vote/" method="post">
        {% csrf_token %}
        <table>
            <tr>
                <td>URL:</td>
                <td><input type="text" name="url" id="url" value="{{ bookmark.url }}" /></td>
            </tr>
            <tr>
                <td>TITLE:</td>
                <td><input type="text" name="title" id="title" value="{{ bookmark.title }}" /></td>
            </tr>
            <tr>
                <td>NOTES:</td>
                <td><input type="text" name="notes" id="notes" value="{{ bookmark.notes }}" /></td>
            </tr>
        </table>
        <input type="submit" value="Submit" />
    </form>

{% endblock content%}

修改 正如评论中指出的那样,我有一个错字,所以只是为了未来的搜索者,以下两种方法中的任何一种都有效:

选项1 将值直接嵌入到传递给render_to_response的字典中,如下所示

return render_to_response(  'bookmarks/bookmark_detail.html',
        {'bookmark': b, 'title':'test title1'},
    context_instance=RequestContext(request))

请参阅模板中的该值,如下所示:

{% block title %}{{ title }}{% endblock title %}

OPTION2 的 创建一个容器字典来保存其他值,然后将其嵌入到传递给render_to_response的字典中,如下所示

d = {'title':'test title 2'}
return render_to_response(  'bookmarks/bookmark_detail.html',
        {'bookmark': b, 'title':d},
    context_instance=RequestContext(request))

请参阅模板中的该值,如下所示:

{% block title %}{{ title.title }}{% endblock title %}

1 个答案:

答案 0 :(得分:1)

正如评论中指出的那样,我有一个错字,所以只是为了未来的搜索者,以下两种方法中的任何一种都有效:

选项1 将值直接嵌入到传递给render_to_response的字典中,如下所示

return render_to_response(  'bookmarks/bookmark_detail.html',
        {'bookmark': b, 'title':'test title1'},
    context_instance=RequestContext(request))

请参阅模板中的该值,如下所示:

{% block title %}{{ title }}{% endblock title %}

OPTION2 的 创建一个容器字典来保存其他值,然后将其嵌入到传递给render_to_response的字典中,如下所示

d = {'title':'test title 2'}
return render_to_response(  'bookmarks/bookmark_detail.html',
        {'bookmark': b, 'title':d},
    context_instance=RequestContext(request))

请参阅模板中的该值,如下所示:

{% block title %}{{ title.title }}{% endblock title %}