Решение просто. Это на самом деле , хорошо зарегистрировал , но не слишком легкий для нахождения. (Я должен был вырыть вокруг - это не подходило, когда я попробовал несколько различных поисков Google.)
следующие работы кода:
>>> from django.template import Template, Context
>>> from django.conf import settings
>>> settings.configure()
>>> t = Template('My name is {{ my_name }}.')
>>> c = Context({'my_name': 'Daryl Spitzer'})
>>> t.render(c)
u'My name is Daryl Spitzer.'
Видят документацию Django (связанный выше) для описания некоторых настроек, которые можно хотеть определить (как аргументы ключевого слова для конфигурирования).
Ваша проблема в том, что класс B не объявлен как класс «нового стиля». Измените его так:
class B(object):
, и он будет работать.
super ()
и все подклассы / суперклассы работают только с классами нового стиля. Я рекомендую вам выработать привычку всегда вводить этот (object)
в любом определении класса, чтобы убедиться, что это класс нового стиля.
Классы старого стиля (также известные как «классические» классы ) всегда имеют тип classobj
; классы нового стиля имеют тип тип
. Вот почему вы получили сообщение об ошибке, которое вы видели:
TypeError: аргумент super () 1 должен быть типом, а не classobj
Попробуйте сами убедиться в этом:
class OldStyle:
pass
class NewStyle(object):
pass
print type(OldStyle) # prints: <type 'classobj'>
print type(NewStyle) # prints <type 'type'>
Обратите внимание, что в Python 3.x все классы нового стиля. Вы по-прежнему можете использовать синтаксис из классов старого стиля, но вы получите класс нового стиля. Итак, в Python 3.