首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django的基本MVT问题

问Django的基本MVT问题
EN

Stack Overflow用户
提问于 2009-04-24 14:46:45
回答 3查看 550关注 0票数 6

我有一个Django网站如下:

  • 站点有几个视图
  • 每个视图都有自己的模板来显示数据。
  • 每个模板扩展了一个基本模板。
  • 基模板是网站的底座,有所有的JS/CSS和基本布局。

所以到现在为止一切都很好。所以现在我们有了站点的主主管(它存在于基本模板中),并且它对所有视图都是通用的。

但是现在我想让它变得动态,并向它添加一些动态数据。我该从哪个角度来做这个?我所有的观点基本上都是render_to_response('viewtemplate.html', someContext)。那么如何将公共视图添加到基本模板中呢?

显然,我不会将公共代码复制到每个单独的视图中.

我想我在MVT基础上缺少了一些基本的东西-- Django。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-24 15:08:44

您希望使用context_instance和RequestContext的。

首先,在views.py顶部添加

代码语言:javascript
复制
from django.template import RequestContext

然后,更新所有视图如下:

代码语言:javascript
复制
def someview(request, ...)
    ...
    return render_to_response('viewtemplate.html', someContext, context_instance=RequestContext(request))

在您的settings.py中添加:

代码语言:javascript
复制
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只需定义:

代码语言:javascript
复制
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模板文档。

票数 7
EN

Stack Overflow用户

发布于 2009-04-27 11:51:17

上下文处理器和RequestContext (请参阅泰勒的答案)是获取在每次页面加载时使用的数据的方法。对于各种视图上可能需要的数据,但不是所有数据(特别是与视图的主要用途不相关但显示在类似导航侧栏中的数据),定义用于检索数据的自定义模板标记通常是最有意义的。

票数 2
EN

Stack Overflow用户

发布于 2009-04-24 15:50:48

或者使用泛型视图,因为它们会自动传递请求上下文。

可以使用简单的直接到模板的泛型视图来避免在请求上下文中导入/传递。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/786149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档