我有一个Django网站如下:
所以到现在为止一切都很好。所以现在我们有了站点的主主管(它存在于基本模板中),并且它对所有视图都是通用的。
但是现在我想让它变得动态,并向它添加一些动态数据。我该从哪个角度来做这个?我所有的观点基本上都是render_to_response('viewtemplate.html', someContext)。那么如何将公共视图添加到基本模板中呢?
显然,我不会将公共代码复制到每个单独的视图中.
我想我在MVT基础上缺少了一些基本的东西-- Django。
发布于 2009-04-24 15:08:44
您希望使用context_instance和RequestContext的。
首先,在views.py顶部添加
from django.template import RequestContext然后,更新所有视图如下:
def someview(request, ...)
...
return render_to_response('viewtemplate.html', someContext, context_instance=RequestContext(request))在您的settings.py中添加:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
...
'myproj.app.context_processors.dynamic',
'myproj.app.context_processors.sidebar',
'myproj.app.context_processors.etc',
)这些context_processors中的每一个都是一个函数,接受request对象并以字典的形式返回上下文。只需将context_processors.py中的所有函数放在适当的应用程序中即可。例如,一个博客可能有一个边栏,上面列出了最近的条目和评论。context_processors.py只需定义:
def sidebar(request):
recent_entry_list = Entry.objects...
recent_comment_list = Comment.objects...
return {'recent_entry_list': recent_entry_list, 'recent_comment_list': recent_comment_list}你可以随心所欲地增加多少或几个。
要了解更多信息,请查看Django模板文档。
发布于 2009-04-27 11:51:17
上下文处理器和RequestContext (请参阅泰勒的答案)是获取在每次页面加载时使用的数据的方法。对于各种视图上可能需要的数据,但不是所有数据(特别是与视图的主要用途不相关但显示在类似导航侧栏中的数据),定义用于检索数据的自定义模板标记通常是最有意义的。
发布于 2009-04-24 15:50:48
或者使用泛型视图,因为它们会自动传递请求上下文。
可以使用简单的直接到模板的泛型视图来避免在请求上下文中导入/传递。
https://stackoverflow.com/questions/786149
复制相似问题