2

So Django 1.5 no longer uses the direct_to_template call.

I am porting over some urls and I got stopped by this.

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/'),
        },
    },

I know I can use

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

but I do not know where the extra_context is supposed to go. Any insight?

Jacob Valenta
  • 6,659
  • 8
  • 31
  • 42

3 Answers3

5

REFERENCE: 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')
)
1

Modifying the above example to support passing a dictionary of values

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'})
Parth Shah
  • 21
  • 3
  • extra_context would be one of the kwargs wouldn't it? i think this one would be good. http://stackoverflow.com/questions/11005733/moving-from-direct-to-template-to-new-templateview-in-django – dtc Jul 02 '13 at 22:57
1

To amend Parth Shah's answer, (I do not have the requisite 50 reputation to simply comment on his post):

I think you need to change the line

context.update(extra_context)

to

context.update(self.extra_context)

as extra_context is a class attribute.

eternal512
  • 31
  • 3