This is where a tool like Docker is really useful; you can easily test a change like this in a completely clean environment - and quickly see if the problem is the new library version or actually just an issue with your machine setup.
On Wednesday, 19 June 2019 05:33:03 UTC+2, Mike Dewhirst wrote: > > Sorry to bother you. I uninstalled all the old packages and reinstalled > the new ones again and the problem has gone away. > > On 18/06/2019 7:03 pm, Mike Dewhirst wrote: > > Can anyone point me in the right direction please? > > > > I'm currently switching from ... > > > > tinymce_lite4 and filebrowser-no-grappelli > > to > > django-tinymce, django-grappelli and django-filebrowser > > > > It is running on Ubuntu 18.04, Python3.6 and Django 2.1. > > > > Thanks > > > > Mike > > > > Internal Server Error: /tinymce/compressor/ > > > > UnicodeDecodeError at /tinymce/compressor/ > > 'ascii' codec can't decode byte 0xc2 in position 3146: ordinal not in > > range(128) > > > > Request Method: GET > > Request URL: > > > https://tinymce/compressor/?js=true&diskcache=true&core=true&suffix=&themes=advanced&plugins=table%2Cspellchecker%2Cpaste%2Csearchreplace&languages=en > > > Django Version: 2.1.9 > > Python Executable: /usr/bin/python3 > > Python Version: 3.6.8 > > Python Path: ['/var/www/train', '/usr/lib/python36.zip', > > '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', > > '/usr/local/lib/python3.6/dist-packages', > > '/usr/lib/python3/dist-packages'] > > Server time: Tue, 18 Jun 2019 08:26:39 +0000 > > Installed Applications: > > ['filebrowser', > > 'grappelli', > > 'django.contrib.admin', > > 'django.contrib.admindocs', > > 'django.contrib.auth', > > 'django.contrib.contenttypes', > > 'django.contrib.sessions', > > 'django.contrib.messages', > > 'django.contrib.staticfiles', > > 'django.contrib.sites', > > 'tinymce', > > 'billing', > > 'common', > > 'course', > > 'credit'] > > Installed Middleware: > > ['django.middleware.security.SecurityMiddleware', > > 'django.contrib.sessions.middleware.SessionMiddleware', > > 'django.middleware.common.CommonMiddleware', > > 'django.middleware.csrf.CsrfViewMiddleware', > > 'django.contrib.auth.middleware.AuthenticationMiddleware', > > 'django.contrib.messages.middleware.MessageMiddleware', > > 'django.middleware.clickjacking.XFrameOptionsMiddleware', > > 'pwned_passwords_django.middleware.PwnedPasswordsMiddleware'] > > > > > > Traceback: > > > > File > > > "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py" > > in inner > > 34. response = get_response(request) > > > > File > > "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" > > in _get_response > > 126. response = self.process_exception_by_middleware(e, request) > > > > File > > "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" > > in _get_response > > 124. response = wrapped_callback(request, *callback_args, > > **callback_kwargs) > > > > File "/usr/local/lib/python3.6/dist-packages/tinymce/views.py" in > > compressor > > 86. return gzip_compressor(request) > > > > File "/usr/local/lib/python3.6/dist-packages/tinymce/compressor.py" in > > gzip_compressor > > 129. content.append(get_file_contents('{!s}.js'.format(f))) > > > > File "/usr/local/lib/python3.6/dist-packages/tinymce/compressor.py" in > > get_file_contents > > 40. return f.read() > > > > File "/usr/lib/python3.6/encodings/ascii.py" in decode > > 26. return codecs.ascii_decode(input, self.errors)[0] > > > > Exception Type: UnicodeDecodeError at /tinymce/compressor/ > > Exception Value: 'ascii' codec can't decode byte 0xc2 in position > > 3146: ordinal not in range(128) > > Request information: > > USER: miked [Superuser] > > > > GET: > > js = 'true' > > diskcache = 'true' > > core = 'true' > > suffix = '' > > themes = 'advanced' > > plugins = 'table,spellchecker,paste,searchreplace' > > languages = 'en' > > > > POST: No POST data > > > > FILES: No FILES data > > > > COOKIES: > > csrftoken = > > 'f5UTaS6WtWvhqImrqCh5E3JxTsMJ0hC1EH0Bd1ssGSFVa1JRRALs3DdJGH5UPh07' > > sessionid = 'dgu3ev20h7auh8nec09rjp7sgbfesl0t' > > > > META: > > CONTEXT_DOCUMENT_ROOT = '/var/www/train/htdocs/' > > CONTEXT_PREFIX = '' > > CSRF_COOKIE = > > 'f5UTaS6WtWvhqImrqCh5E3JxTsMJ0hC1EH0Bd1ssGSFVa1JRRALs3DdJGH5UPh07' > > DOCUMENT_ROOT = '/var/www/train/htdocs/' > > GATEWAY_INTERFACE = 'CGI/1.1' > > HTTP_ACCEPT = '*/*' > > HTTP_ACCEPT_ENCODING = 'gzip, deflate, br' > > HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.5' > > HTTP_CACHE_CONTROL = 'max-age=0' > > HTTP_CONNECTION = 'keep-alive' > > HTTP_COOKIE = > > > 'csrftoken=f5UTaS6WtWvhqImrqCh5E3JxTsMJ0hC1EH0Bd1ssGSFVa1JRRALs3DdJGH5UPh07; > > > sessionid=dgu3ev20h7auh8nec09rjp7sgbfesl0t' > > HTTP_DNT = '1' > > HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) > > Gecko/20100101 Firefox/67.0' > > PATH_INFO = '/tinymce/compressor/' > > PATH_TRANSLATED = '/var/www/train/train/wsgii.py/tinymce/compressor/' > > QUERY_STRING = > > > 'js=true&diskcache=true&core=true&suffix=&themes=advanced&plugins=table%2Cspellchecker%2Cpaste%2Csearchreplace&languages=en' > > > > REQUEST_METHOD = 'GET' > > REQUEST_SCHEME = 'https' > > REQUEST_URI = > > > '/tinymce/compressor/?js=true&diskcache=true&core=true&suffix=&themes=advanced&plugins=table%2Cspellchecker%2Cpaste%2Csearchreplace&languages=en' > > > > SCRIPT_FILENAME = '/var/www/train/train/wsgii.py' > > SCRIPT_NAME = '' > > SERVER_PORT = '443' > > SERVER_PROTOCOL = 'HTTP/1.1' > > SERVER_SIGNATURE = '<address>Apache/2.4.29 (Ubuntu) Server at > > www.sharedtrain.com Port 443</address>\n' > > SERVER_SOFTWARE = 'Apache/2.4.29 (Ubuntu)' > > apache.version = '(2, 4, 27)' > > mod_wsgi.application_group = '|' > > mod_wsgi.callable_object = 'application' > > mod_wsgi.enable_sendfile = '0' > > mod_wsgi.handler_script = '' > > mod_wsgi.ignore_activity = '0' > > mod_wsgi.listener_host = '' > > mod_wsgi.listener_port = '443' > > mod_wsgi.path_info = '/tinymce/compressor/' > > mod_wsgi.process_group = '' > > mod_wsgi.request_handler = 'wsgi-script' > > mod_wsgi.request_id = 'fyk13xxSuY0' > > mod_wsgi.request_start = '1560846399777151' > > mod_wsgi.script_name = '' > > mod_wsgi.script_reloading = '1' > > mod_wsgi.script_start = '1560846399777431' > > mod_wsgi.thread_id = 5 > > mod_wsgi.thread_requests = 0 > > mod_wsgi.total_requests = 4 > > mod_wsgi.version = '(4, 5, 17)' > > wsgi.errors = <_io.TextIOWrapper name='<wsgi.errors>' encoding='utf-8'> > > wsgi.file_wrapper = '' > > wsgi.input = <mod_wsgi.Input object at 0x7fae33a7d880> > > wsgi.multiprocess = True > > wsgi.multithread = True > > wsgi.run_once = False > > wsgi.url_scheme = 'https' > > wsgi.version = '(1, 0)' > > > > Settings: > > Using settings module train.settings.production > > ABSOLUTE_URL_OVERRIDES = {} > > APACHE = True > > APPEND_SLASH = True > > APPS_ROOT = '/var/www/train' > > AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend'] > > AUTH_PASSWORD_VALIDATORS = '********************' > > AUTH_USER_MODEL = 'common.User' > > BASE_DIR = '/var/www/train/train' > > CACHES = {'default': {'BACKEND': > > 'django.core.cache.backends.locmem.LocMemCache'}} > > CACHE_MIDDLEWARE_ALIAS = 'default' > > CACHE_MIDDLEWARE_KEY_PREFIX = '********************' > > CACHE_MIDDLEWARE_SECONDS = 600 > > CSRF_COOKIE_AGE = 31449600 > > CSRF_COOKIE_DOMAIN = None > > CSRF_COOKIE_HTTPONLY = True > > CSRF_COOKIE_NAME = 'csrftoken' > > CSRF_COOKIE_PATH = '/' > > CSRF_COOKIE_SAMESITE = 'Lax' > > CSRF_COOKIE_SECURE = True > > CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure' > > CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN' > > CSRF_TRUSTED_ORIGINS = [] > > CSRF_USE_SESSIONS = False > > DATABASES = {'default': {'ENGINE': > > 'django.db.backends.postgresql_psycopg2', 'NAME': 'train', 'USER': > > 'miked', 'PASSWORD': '********************', 'HOST': 'localhost', > > 'PORT': '5432', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, > > 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': > > {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}} > > DATABASE_ROUTERS = [] > > DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 > > DATA_UPLOAD_MAX_NUMBER_FIELDS = 2000 > > DATETIME_FORMAT = 'N j, Y, P' > > DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', > > '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y > > %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', > > '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] > > DATE_FORMAT = 'N j, Y' > > DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', > > '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B > > %Y', '%d %B, %Y'] > > DEBUG = False > > DEBUG_PROPAGATE_EXCEPTIONS = False > > DECIMAL_SEPARATOR = '.' > > DEFAULT_APPS = ['django.contrib.admin', 'django.contrib.admindocs', > > 'django.contrib.auth', 'django.contrib.contenttypes', > > 'django.contrib.sessions', 'django.contrib.messages', > > 'django.contrib.staticfiles', 'django.contrib.sites'] > > DEFAULT_CHARSET = 'utf-8' > > DEFAULT_CONTENT_TYPE = 'text/html' > > DEFAULT_EXCEPTION_REPORTER_FILTER = > > 'django.views.debug.SafeExceptionReporterFilter' > > DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' > > DEFAULT_INDEX_TABLESPACE = '' > > DEFAULT_TABLESPACE = '' > > DIRECTORY = '' > > DISALLOWED_USER_AGENTS = [] > > EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' > > EMAIL_HOST_PASSWORD = '********************' > > EMAIL_PORT = '' > > EMAIL_SSL_CERTFILE = None > > EMAIL_SSL_KEYFILE = '********************' > > EMAIL_SUBJECT_PREFIX = '[Django] ' > > EMAIL_TIMEOUT = None > > EMAIL_USE_LOCALTIME = False > > EMAIL_USE_SSL = False > > EMAIL_USE_TLS = False > > FILEBROWSER_DIRECTORY = '' > > FILEBROWSER_EXTENSIONS = {'Image': ['.jpg', '.jpeg', '.gif', '.png'], > > 'Document': ['.pdf', '.rtf', '.txt', '.csv'], 'Video': ['.webm', > > '.mp4', '.mpeg', '.avi'], 'Audio': ['.mp3', '.mp4']} > > FILEBROWSER_MAX_UPLOAD_SIZE = 209715200 > > FILEBROWSER_PLACEHOLDER = 'placeholder/placeholder_128.jpeg' > > FILEBROWSER_SELECT_FORMATS = {'file': ['Image', 'Document', 'Video', > > 'Audio'], 'image': ['Image'], 'document': ['Document'], 'media': > > ['Video', 'Audio']} > > FILEBROWSER_VERSIONS_BASEDIR = '_versions/' > > FILE_CHARSET = 'utf-8' > > FILE_UPLOAD_DIRECTORY_PERMISSIONS = None > > FILE_UPLOAD_HANDLERS = > > ['django.core.files.uploadhandler.MemoryFileUploadHandler', > > 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] > > FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 > > FILE_UPLOAD_PERMISSIONS = None > > FILE_UPLOAD_TEMP_DIR = None > > FIRST_DAY_OF_WEEK = 0 > > FIXTURE_DIRS = [] > > FORCE_SCRIPT_NAME = None > > FORMAT_MODULE_PATH = None > > FORM_RENDERER = 'django.forms.renderers.DjangoTemplates' > > IGNORABLE_404_URLS = [] > > INSTALLED_APPS = ['filebrowser', 'grappelli', 'django.contrib.admin', > > 'django.contrib.admindocs', 'django.contrib.auth', > > 'django.contrib.contenttypes', 'django.contrib.sessions', > > 'django.contrib.messages', 'django.contrib.staticfiles', > > 'django.contrib.sites', 'tinymce', 'billing', 'common', 'course', > > 'credit'] > > INTERNAL_IPS = ['127.0.0.1', '192.168.0.103', '192.168.0.63', > > '192.168.0.64', '192.168.0.66', '192.168.0.67', '192.168.0.68'] > > LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', > > 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', > > 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), > > ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), > > ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', > > 'English'), ('en-au', 'Australian English'), ('en-gb', 'British > > English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', > > 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', > > 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', > > 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', > > 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), > > ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', > > 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper > > Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', > > 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), > > ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', > > 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), > > ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), > > ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', > > 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', > > 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', > > 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), > > ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', > > 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), > > ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), > > ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), > > ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', > > 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', > > 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] > > LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur'] > > LANGUAGE_CODE = 'en-us' > > LANGUAGE_COOKIE_AGE = None > > LANGUAGE_COOKIE_DOMAIN = None > > LANGUAGE_COOKIE_NAME = 'django_language' > > LANGUAGE_COOKIE_PATH = '/' > > LOCALE_PATHS = [] > > LOCAL_APPS = ['billing', 'common', 'course', 'credit'] > > LOGGING = {} > > LOGGING_CONFIG = 'logging.config.dictConfig' > > LOGIN_REDIRECT_URL = 'course:index_view' > > LOGIN_URL = '/login/' > > LOGOUT_REDIRECT_URL = 'course:index_view' > > MEDIA_ROOT = '/var/www/media/train/' > > MEDIA_URL = '/media/' > > MESSAGE_STORAGE = > > 'django.contrib.messages.storage.fallback.FallbackStorage' > > MIDDLEWARE = ['django.middleware.security.SecurityMiddleware', > > 'django.contrib.sessions.middleware.SessionMiddleware', > > 'django.middleware.common.CommonMiddleware', > > 'django.middleware.csrf.CsrfViewMiddleware', > > 'django.contrib.auth.middleware.AuthenticationMiddleware', > > 'django.contrib.messages.middleware.MessageMiddleware', > > 'django.middleware.clickjacking.XFrameOptionsMiddleware', > > 'pwned_passwords_django.middleware.PwnedPasswordsMiddleware'] > > MIGRATION_MODULES = {} > > MONTH_DAY_FORMAT = 'F j' > > NUMBER_GROUPING = 0 > > PASSWORD_HASHERS = '********************' > > PASSWORD_RESET_TIMEOUT_DAYS = '********************' > > PREPEND_WWW = False > > PRE_ADMIN = ['filebrowser', 'grappelli'] > > PROJECT = 'train' > > PY = '3.6' > > ROOT_URLCONF = 'train.urls' > > SECRET_KEY = '********************' > > SECURE_BROWSER_XSS_FILTER = True > > SECURE_CONTENT_TYPE_NOSNIFF = True > > SECURE_HSTS_INCLUDE_SUBDOMAINS = False > > SECURE_HSTS_PRELOAD = False > > SECURE_HSTS_SECONDS = 0 > > SECURE_PROXY_SSL_HEADER = None > > SECURE_REDIRECT_EXEMPT = [] > > SECURE_SSL_HOST = None > > SECURE_SSL_REDIRECT = True > > SERVER_EMAIL = 'root@localhost' > > SESSION_CACHE_ALIAS = 'default' > > SESSION_COOKIE_AGE = 1209600 > > SESSION_COOKIE_DOMAIN = None > > SESSION_COOKIE_HTTPONLY = True > > SESSION_COOKIE_NAME = 'sessionid' > > SESSION_COOKIE_PATH = '/' > > SESSION_COOKIE_SAMESITE = 'Lax' > > SESSION_COOKIE_SECURE = True > > SESSION_ENGINE = 'django.contrib.sessions.backends.db' > > SESSION_EXPIRE_AT_BROWSER_CLOSE = False > > SESSION_FILE_PATH = None > > SESSION_SAVE_EVERY_REQUEST = False > > SESSION_SERIALIZER = > 'django.contrib.sessions.serializers.JSONSerializer' > > SETTINGS_DIR = '/var/www/train/train/settings' > > SETTINGS_MODULE = 'train.settings.production' > > SHORT_DATETIME_FORMAT = 'm/d/Y P' > > SHORT_DATE_FORMAT = 'm/d/Y' > > SIGNING_BACKEND = 'django.core.signing.TimestampSigner' > > SILENCED_SYSTEM_CHECKS = [] > > SITE_ID = 1 > > SITE_ROOT = '/var/www/train' > > SRV_ROOT = '/var' > > STATICFILES_DIRS = ['/var/www/train/static/'] > > STATICFILES_FINDERS = > > ['django.contrib.staticfiles.finders.FileSystemFinder', > > 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] > > STATICFILES_STORAGE = > > 'django.contrib.staticfiles.storage.StaticFilesStorage' > > STATIC_ROOT = '/var/www/static/train/' > > STATIC_URL = '/static/' > > TEMPLATES = [{'BACKEND': > > 'django.template.backends.django.DjangoTemplates', 'DIRS': > > ['/var/www/train/templates/'], 'APP_DIRS': True, 'OPTIONS': > > {'context_processors': ['django.template.context_processors.debug', > > 'django.template.context_processors.request', > > 'django.contrib.auth.context_processors.auth', > > 'django.template.context_processors.i18n', > > 'django.template.context_processors.media', > > 'django.template.context_processors.static', > > 'django.template.context_processors.tz', > > 'django.contrib.messages.context_processors.messages']}}] > > TEST_NON_SERIALIZED_APPS = [] > > TEST_RUNNER = 'django.test.runner.DiscoverRunner' > > THIRD_PARTY_APPS = ['tinymce'] > > THOUSAND_SEPARATOR = ',' > > TIME_FORMAT = 'P' > > TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] > > TIME_ZONE = 'UTC' > > TINYMCE_COMPRESSOR = True > > TINYMCE_DEFAULT_CONFIG = {'plugins': > > 'table,spellchecker,paste,searchreplace', 'theme': 'advanced', > > 'cleanup_on_startup': True, 'relative_urls': False} > > TINYMCE_EXTRA_MEDIA = None > > TINYMCE_FILEBROWSER = True > > TINYMCE_INCLUDE_JQUERY = True > > TINYMCE_JS_ROOT = '/var/www/media/train/js/tiny_mce' > > TINYMCE_JS_URL = '/media/js/tiny_mce/tiny_mce.js' > > TINYMCE_SPELLCHECKER = True > > USE_I18N = True > > USE_L10N = True > > USE_T18N = False > > USE_THOUSAND_SEPARATOR = False > > USE_TZ = True > > USE_X_FORWARDED_HOST = False > > USE_X_FORWARDED_PORT = False > > VERSIONS_BASEDIR = '_versions/' > > WEB_ROOT = '/var/www' > > WSGI_APPLICATION = 'train.wsgii.application' > > X_FRAME_OPTIONS = 'DENY' > > YEAR_MONTH_FORMAT = 'F Y' > > > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/fe304fe7-728d-42f6-b78d-6c80864f2695%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.