【问题标题】:Django 1.4 to Django 1.5 Direct to template extra_contextDjango 1.4 到 Django 1.5 直接到模板 extra_context
【发布时间】:2013-04-06 09:15:49
【问题描述】:

所以 Django 1.5 不再使用 direct_to_template 调用。

我正在移植一些网址,但我被阻止了。

url(r'^system_settings/$',
    'django.views.generic.simple.direct_to_template',
    {
        'template': 'helpdesk/system_settings.html',
        'extra_context': {
            'ADMIN_URL': getattr(settings, 'ADMIN_URL', '/admin/'),
        },
    },

我知道我可以使用

url(r'^help/context/$',
    TemplateView.as_view(template_name='helpdesk/system_settings.html')...

但我不知道extra_context 应该去哪里。有什么见解吗?

【问题讨论】:

    标签: django-1.4 django-1.5


    【解决方案1】:

    参考:https://docs.djangoproject.com/en/dev/topics/class-based-views/generic-display/#adding-extra-context

    from django.views.generic import TemplateView
    from django.utils.decorators import classonlymethod
    
    utils.autodiscover()
    class ExtraContextTemplateView(TemplateView):
    
        @classonlymethod
        def get_context_data(self, **kwargs):
            context = super(ExtraContextTemplateView, self).get_context_data(**kwargs)
            context['ADMIN_URL'] = getattr(settings, 'ADMIN_URL', '/admin/')
            return context
    
    urlpatterns = patterns('',
        url(r'^help/context/$', ExtraContextTemplateView.as_view(template_name='helpdesk/system_settings.html')
    )
    

    【讨论】:

    • 为什么是utils.autodiscover()?它指的是哪个utils 模块?
    • 你既不需要 utlis.autodiscover 也不需要 @classonlymethod 装饰器。不确定它们的作用,但没有它们也能正常工作。
    【解决方案2】:

    修改上面的例子以支持传递值的字典

    class ExtraContextTemplateView(TemplateView):
    
        extra_context = {}
        def get_context_data(self, **kwargs):
            context = super(ExtraContextTemplateView, self).get_context_data(**kwargs)
            context.update(extra_context)
            return context
    
    urlpatterns = patterns('',
        url(r'^help/context/$',
            ExtraContextTemplateView.as_view(template_name='helpdesk/system_settings.html', 
                                             extra_context={'title': 'Help-System Settings'})
    

    【讨论】:

    【解决方案3】:

    要修改 Parth Shah 的回答,(我没有必要的 50 声望来简单地评论他的帖子):

    我觉得你需要换行

    context.update(extra_context)

    context.update(self.extra_context)

    因为 extra_context 是一个类属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-23
      • 2013-04-01
      • 1970-01-01
      • 2012-06-29
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      相关资源
      最近更新 更多