【问题标题】:Basic MVT issue in DjangoDjango中的基本MVT问题
【发布时间】:2010-10-21 15:09:28
【问题描述】:

我有一个 Django 网站如下:

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

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

但现在我想让它动态化,并添加一些动态数据。我应该在哪个观点上这样做?我所有的观点基本上都是render_to_response('viewtemplate.html', someContext)。那么如何在基础模板中添加通用视图呢?

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

我认为我在 Django 的 MVT 基础中遗漏了一些基本内容。

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    您想使用context_instanceRequestContexts。

    首先,在您的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 中的所有功能放入相应的应用程序中即可。例如,博客可能有一个带有最近条目和 cmets 列表的侧边栏。 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

    【讨论】:

    • 只是不要过度使用上下文处理器——只有真正用于每个页面加载的数据才属于上下文处理器,否则你就是在浪费数据库查询。
    【解决方案2】:

    上下文处理器和 RequestContext(请参阅 Tyler 的回答)是获取每次页面加载时使用的数据的方法。对于您可能需要的各种视图上的数据,但不是全部(尤其是与视图的主要目的无关,但出现在导航侧边栏之类的数据),定义自定义模板通常最有意义用于检索数据的标签。

    【讨论】:

      【解决方案3】:

      或使用generic view,因为它们会自动传递请求上下文。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-01
        • 1970-01-01
        • 2021-11-07
        • 2016-02-04
        • 1970-01-01
        • 2011-07-13
        相关资源
        最近更新 更多