Wednesday, June 19, 2019

Re: Internal Server Error: /tinymce/compressor/

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+unsubscribe@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.

No comments:

Post a Comment