
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
github.com/arteria/cmsplugin-contact-plus
Advanced tools
cmsplugin-contact-plus lets you build forms for your Django CMS project with exactly the fields you want in the order you want with a minimal effort.
Beside the regular input fields there are "auto" fields, for example to submit the referral page, or additional, hidden values. The form will be submitted to an email address that is defined per form. This allows to cover a lot of use cases with a single and simple plugin.
cmsplugin-contact-plus is licensed under the MIT License.
This plugin has been tested with:
To install from PyPI, in your virtualenv run
pip install cmsplugin_contact_plus
or to get the latest commit from GitHub,
pip install -e git+git://github.com/arteria/cmsplugin-contact-plus.git#egg=cmsplugin_contact_plus
cmsplugin-contact-plus requires https://github.com/iambrandontaylor/django-admin-sortable as dependency. Please have a look at the "Supported Django Versions", "Installation", and "Configuration" sections of the README.
Put cmsplugin_contact_plus and adminsortable in your INSTALLED_APPS settings.py section and verify that the ADMINS setting is set as well.
Don't forget to migrate your database.
Configure Django's e-mail settings appropriately.
CONTACT_PLUS_FROM_EMAILSpecify DEFAULT_FROM_EMAIL (https://docs.djangoproject.com/en/dev/ref/settings/#default-from-email) in your projects settings to send emails from a specific address. Otherwise Django's default 'webmaster@localhost' will be used.
CONTACT_PLUS_REPLY_EMAIL_LABELTo set the reply-to header for the email automatically, specify CONTACT_PLUS_REPLY_EMAIL_LABEL in your project settings. If the label is "your email" for example, then set CONTACT_PLUS_REPLY_EMAIL_LABEL='your-email' - basically it's the slugified field label that is used to look up the reply-to email address.
CONTACT_PLUS_SEND_COPY_TO_REPLY_EMAILTo send a carbon copy to the submitter you can set the CONTACT_PLUS_SEND_COPY_TO_REPLY_EMAIL to True. If a Field with the label email exists this email will be used as Cc Header.
CONTACT_PLUS_REQUIRED_CSS_CLASSDefines the required CSS class, default is required.
CMSPLUGIN_CONTACT_PLUS_TEMPLATESTo allow users to choose between multiple contact form templates, specify the template choices in your project settings like this:
CMSPLUGIN_CONTACT_PLUS_TEMPLATES = [
('cmsplugin_contact_plus/contact.html', 'Contact Form'),
('cmsplugin_contact_plus/contact_newsletter.html', 'Newsletter Form'),
]
Make sure that the templates can be loaded by Django.
CMSPLUGIN_CONTACT_FORM_VALIDATORSSpecify CMSPLUGIN_CONTACT_FORM_VALIDATORS in your projects settings to one or more validator functions that are used with the CharFieldWithValidator field. Expected is a list of strings, each string should point a validator function by its full path. For example:
CMSPLUGIN_CONTACT_FORM_VALIDATORS = [
'myproject.utils.validators.phone_number_validator',
]
CONTACT_PLUS_SEND_HTML_EMAILDefault is False. If activated, the notification email is sent as multipart/alternative.
CONTACT_PLUS_FAIL_SILENTLYDefault is True. If deactivated, email failure is not silent anymore.
To make the reCAPTCHA field type available to your users, add 'captcha' to your INSTALLED_APPS and define your RECAPTCHA_PUBLIC_KEY and RECAPTCHA_PRIVATE_KEY as described in django-recaptcha's README. A single reCAPTCHA instance per page is supported.
If you are not using the default template settings of Django, make sure that 'django.template.loaders.app_directories.Loader' is added to the TEMPLATES.OPTIONS.loaders list in your settings.py file. Likewise, if your Django version is < 1.8, make sure that the above-mentioned loader is in your list of TEMPLATE_LOADERS.
from.is_multipart is True (= the form has attached files)name="{{ field.label|slugify }}". This is necessary for the proper validation of the form.| cmsplugin-contact-plus is free software. If you find it useful and would like to give back, please consider to make a donation using Bitcoin or PayPal. Thank you! |
|---|
Please have a look at the latest commits for the work-in-progress development version.
Remove undocumented template auto-discovery functionality
Upgrading: If you have relied on Contact Plus to automagically discover multiple form template choices, make sure the choices are now listed explicitly in your settings as described here: https://github.com/arteria/cmsplugin-contact-plus#cmsplugin_contact_plus_templates
Drop Django 1.4 support
Replace https://github.com/centralniak/django-inline-ordering dependency with https://github.com/iambrandontaylor/django-admin-sortable.
Upgrading: Remove 'inline_ordering' from INSTALLED_APPSand add 'adminsortable' instead. To ensure the compatibility of the new dependency with your project's Django version, have a look at the "Supported Django Versions", "Installation", and "Configuration" sections of the README.
MANIFEST.in. Locale files are now correctly includedsubmit to submit_button_text to achieve django CMS 3.3/3.4 compatibility. Please migrate your database and update your templates.required_css_class of contact formCONTACT_PLUS_FROM_EMAIL, and use DEFAULT_FROM_EMAIL as a fallbackMEDIA_ROOT.Trigger a signal contact_message_sent when a message was sent successfully. See signals.py .
Multiple templates support, in your project settings define
CMSPLUGIN_CONTACT_PLUS_TEMPLATES = [
('cmsplugin_contact_plus/contact.html', 'contact.html'),
('cmsplugin_contact_plus/hello.html', 'hello.html'),
# more templates here
]
To be able to use the new features, please migrate manually
ALTER TABLE `cmsplugin_contactplus` ADD `template` varchar(255) NOT NULL AFTER `submit`;
./upload-to-pypi.sh.ADMINS is not defined in settings.py. (Issue #2)auto_TextArea shortcut to create a TextArea. Note: Currently the widget defined in the plugins are ignored.For example, the field lable for the 'CharField as HiddenInput' is named to "Object description". Using the lable name, the ID for the input field will be 'id_object-description', the name 'object-description'.
Store data is dead easy using jQuery.
$('#id_object-description').val('Hello Hidden World'); // The string 'Hello Hidden World' will be send by email as well.
Fixed indentation /EOF in setup.py
Fixed IndentationError in setup.py
arteria open sourced cmsplugin_contact_plus unter the MIT License. This plugin was built on a fork of cmsplugin_contact. Kudos!
FAQs
Unknown package
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.