python - Django 中的基本 MVT 问题

标签 python django django-templates

我有一个 Django 网站如下:

  • 网站有多个 View
  • 每个 View 都有自己的模板来显示其数据
  • 每个模板都扩展了一个基础模板
  • 基础模板是网站的基础,具有所有的 JS/CSS 和基本布局

到目前为止,一切都很好。所以现在我们有了站点的 master head(它存在于基本模板中),它对所有 View 都是通用的。

但是现在我想把它做成动态的,给它添加一些动态数据。我在哪个 View 上执行此操作?我所有的 View 基本上都是 render_to_response('viewtemplate.html', someContext)。那么如何向基本模板添加一个公共(public) View 呢?

显然我不会将公共(public)代码复制到每个单独的 View ...

我想我在 Django 的 MVT 基础上遗漏了一些基本的东西。

最佳答案

您想使用 context_instanceRequestContext

首先,在 views.py 的顶部添加:

from django.template import RequestContext

然后,将所有 View 更新为如下所示:

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 Template Docs .

关于python - Django 中的基本 MVT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/786149/

相关文章:

python - 如何为绑定(bind)表单设置默认变量?

django - paypal-django WPP授权-抓包

django - 使用命名空间有什么好处?

django-通知-hq : cannot show notifications

Django 将对象从 View 传递到下一个进行处理

python - 按日期对记录进行分组并添加字段列表

python - 尝试使用 openCV 和 HoughCircles 分割 DICOM 图像中的圆圈时出错

python - 需要解释此代码

mysql - 在 Django 中加载固定装置时出现内容类型问题

用于 Django 中动态内容的 CSS Grid/Flexbox