django - render_to_response - 渲染了一些东西

Posted

技术标签:

【中文标题】django - render_to_response - 渲染了一些东西【英文标题】:django - render_to_response - some stuff is rendered 【发布时间】:2013-03-10 06:47:44 【问题描述】:

这是一个非常简单的问题,但我就是想不通。

我有一个获取一行然后在其上调用 render_to_response 的视图。但是我想在模板中添加一些其他的东西来显示,这些东西不是来自数据库。我只是不知道该怎么做,而且我在文档中找不到任何涵盖这种情况的内容。

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

(我在下面显示的示例中正在处理的东西是 django 教程 'polls' 应用程序的一种突变,如果某些命名看起来有点奇怪,请道歉)

查看

除了 BookMark 对象,我还添加了一些任意数据,在我的示例中是字符串“测试标题”。

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

基础模板

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

编辑: 正如在 cmets 中指出的那样,我在那里有一个错字,所以为了将来的搜索者,以下两种方法中的任何一种都有效:

选项 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 %

选项2 创建一个容器字典来保存其他值,然后将其嵌入到传递给 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 %

【问题讨论】:

语法错误:d = 'title' = 'test title' 在您的 detail 函数中 感谢您指出这一点 如果您有解决方案,请关闭问题(将您的解决方案添加为答案并将其标记为选定答案) 【参考方案1】:

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

选项 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 %

选项2 创建一个容器字典来保存其他值,然后将其嵌入到传递给 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 %

【讨论】:

以上是关于django - render_to_response - 渲染了一些东西的主要内容,如果未能解决你的问题,请参考以下文章

Django之路

Django系列

django 错误

mac电脑安装django ,运行django报错解决

Django 大神带你飞系列~走进Django

django的文档