我正在创建一个简单的Web应用程序,我需要有一个右侧边栏,其中包含用户的个人数据.它是一个包含20个字符串和10个模型对象的字典.我希望这个数据集包含在每个网页中.有两种选择.
(a)我为每一个行动都这样做:
data = {
'somedata', somedata #data created for this action needed for the page
}
data.update(ul.getRightSidebarContent(user)) #add all data to be shown for the user
variables = RequestContext(request, data)
return render_to_response("anypage.html", variables)
Run Code Online (Sandbox Code Playgroud)
(b)创建ajax动作并将它们放入base.html模板(由所有模板页面继承),因此在每个页面请求时,ajax动作将加载右侧栏内容.
还有其他解决方案吗?哪一个是最好的?每种解决方案可能存在的缺点?你能详细说明吗?
谢谢,克里斯
从django一侧有两种解决方案:
您可以使用上下文处理器在呈现页面之前将此数据添加到您的上下文中.我认为这对您的问题来说是一个非常好的解决方案,但请记住,只有RequestContext在所有视图中添加对象时才会调用上下文处理器- 如果不这样做,则不会添加处理器的数据.一个缺点可能是上下文处理器将被这些视图中的每一个调用,如果你不需要它们会导致一些开销; 但我不认为这对你来说应该是个问题......
您可以编写自定义模板标记,将这些数据提取到模板中,并在需要的地方重复使用.使模板标签已经在模板中呈现数据可能是一个优势,因此您不必再使用模板处理模板,只需将模板标记放在您希望内容显示的位置即可.
我认为将它放在每个视图代码中的第一种可能性并不重要,你必须重复很多事情......如果输出数据的生成可能需要很长时间或者使用其他Web服务,那么ajax解决方案是有意义的如果你不得不等待,那么不想有一个缓慢加载的页面......