这是一个非常简单的问题,但我就是想不通。
我有获取一行然后在其上调用 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%}
编辑: 正如评论中指出的那样,我在那里有一个错字,所以为了未来的搜索者,以下两种方法中的任何一种都有效:
选项 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 %}