Package: django-front-edit
Django-Front-EditDescriptionA front end editing app for Django. This app allows one to edit dynamic
data on the front end of a website when logged in as a staff member. The
app allows the editing of dynamic content within any element (See
Example below).InstallationYou must have setuptools installed.From PyPI:pip install django_front_editOr download a package from thePyPIor theBitBucket
page:pip install <package>Or unpack the package and:python setup.py install.DependenciesDjango >= 1.4 and its dependencies.beautifulsoup4 >= 4.3.2 located at:http://www.crummy.com/software/BeautifulSoup/orhttps://pypi.python.org/pypi/beautifulsoup4/.django-classy-tags >= 0.5.1 located at:https://github.com/ojii/django-classy-tagsorhttps://pypi.python.org/pypi/django-classy-tags.and either one of the following:(seeFRONT_EDIT_HTML_PARSERsetting below)html5lib >= 0.999, != 0.9999, != 1.0b5, != 0.99999, != 1.0b6 located at:https://github.com/html5lib/html5lib-pythonorhttps://pypi.python.org/pypi/html5lib.lxml located at:https://github.com/lxml/lxmlorhttps://pypi.python.org/pypi/lxmlIntegrationIn your Django settings.py file insert the following in an appropriate
place:...
# for django >1.4 <1.8
TEMPLATE_CONTEXT_PROCESSORS = [
    'django.contrib.auth.context_processors.auth',
    ...
    'django.core.context_processors.request',
    ...
    'front_edit.context_processors.defer_edit'
]
# or for django >1.8
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'OPTIONS': {
            'context_processors': [
                'django.contrib.auth.context_processors.auth',
                ...
                'django.template.context_processors.request',
                ...
                'front_edit.context_processors.defer_edit'
            ]
        }
    }
]
...

INSTALLED_APPS = [
    ...
    'django.contrib.contenttypes',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.sessions',
    ...
    'front_edit',
    ...
]

...In your main urls.py file:...
url(r'', include('front_edit.urls')),
...There is nothing to syncdb or migrate.UsageThis app uses template tags for all its functionality.Template tagsMake sure to load upfront_edit_tagsin your template.Edit…EndEditArguments:object.field… [class_name]object.field:This argument consist of multiple arguments of dot
separated object/field variables. Currently only fields within the
same model object can be edited per tag.class_name:This
optional argument is the class name(s) to put on the form, edit
button, and overlay in case you need to adjust them.This tag specifies an editable region.EditLink…EndEditLinkArguments:admin_url, [class_name]admin_url:A URL string to link to.class_name:This
optional argument is the class name(s) to put on the form, edit
button, and overlay in case you need to adjust them.This tag specifies an editable region that will link to an admin page
instead of editing inline. For example:{% url 'admin:constance_config_changelist' as admin_url %}
{% edit_link admin_url %}
    <div>{{ config.FOO }}</div>
{% endedit_link %}EditWithHints…EndEditWithHintsArguments:NoneThis tag is used to make editable each object in a collection of
pagelets each marked withEditHinttags.EditHintArguments:object fields [class_name]object:A model instance.fields:A list of fields on this
model, i.e. ‘field1,field2,…,fieldN’class_name:This
optional argument is the class name(s) to put on the form, edit
button, and overlay in case you need to adjust them.This tag adds a hint to a small cacheable template used in a pagelet
system.EditLoaderArguments:NoneThis tag includes all the boilerplate to make the front-end editing
work. This tag should always be right before the end<body>tag in
your base template.JavaScriptThere is one command that you can call if you need to reposition the
edit elements. You should call this if any JavaScript will change the
offset of in-flow elements.djangoFrontEdit.refresh();Examplepagelet_text.html
{% load front_edit_tags %}
<div class="pagelet pagelet-text" {% edit_hint instance "title,content" "class_name" %}>
    <div class="title">
        {{ instance.title }}
    </div>
    <div class="richtext">
        {{ instance.content|safe }}
    </div>
</div>

pagelet_image.html
{% load front_edit_tags %}
<div class="pagelet pagelet-image" {% edit_hint instance "image,caption" "class_name" %}>
    <div class="image">
        <img src="{{ instance.image.url }}"/>
        <div class="caption">
            {{ instance.caption }}
        </div>
    </div>
</div>

somepage.html
{% load front_edit_tags pagelet_tags %}
<!DOCTYPE html>
<html>
<head></head>
<body>
    <div>
        <!-- In a list -->
        <ul>
            {% for object in objects %}
            {% edit object.text_field object.char_field "class_name" %}
            <li>
                <span>{{ object.text_field }}</span>
                <span>{{ object.char_field }}</span>
            </li>
            {% endedit %}
            {% endfor %}
        </ul>
        <!-- In a table -->
        <table>
            <tbody>
                <tr>
                    {% for object in objects %}
                    {% edit object.text_field object.char_field "class_name" %}
                    <td>
                        <span>{{ object.text_field }}</span>
                        <span>{{ object.char_field }}</span>
                    </td>
                    {% endedit %}
                    {% endfor %}
                </tr>
            </tbody>
        </table>
    </div>
    <!-- in a pagelet system -->
    <div>
        {% edit_with_hints %}
        {% render_pagelets object.pagelets %}
        {% endedit_with_hints %}
    </div>
    <div>
        <!-- On a span -->
        {% edit object.text_field "class_name" %}
        <span>{{ object.text_field }}</span>
        {% endedit %{
    </div>
    {% edit_loader %}
</body>
</html>AdvancedSettingsSettings can be set by using the individual settings or by
specifying a dictionary as follows:FRONT_EDIT_SETTINGS = {
    'CUSTOM_FIELDS':['path.to.custom.field'],
    ...
    'USE_HINTS':True,
}FRONT_EDIT_CUSTOM_FIELDSDefault:[]A list of dot-separated paths to a custom model field such as a rich
text field or file field that has a Media class on its widget.FRONT_EDIT_DEFER_KEYDefault:‘__front_edit_defer’The context key used to defer display of the collective editable
loader templates.FRONT_EDIT_EDITABLE_TEMPLATEDefault:‘front_edit/includes/editable.html’This template is the editable. Which includes the form, edit button,
and overlay.FRONT_EDIT_HTML_PARSERDefault:‘html5lib’Change the html parser used by beautifulsoup. By default we use
‘html5lib’, but we also support ‘lxml’. You will have to install
either of those libraries. We do not support the builtin
‘html.parser’ library due to incompatibilities.FRONT_EDIT_INLINE_EDITING_ENABLEDDefault:TrueOption to disable inline editing.FRONT_EDIT_JQUERY_BACKUPDefault:‘front_edit/js/jquery.min.js’The path to the static jquery backup library if the CDN is down. The
value is passed through thestatictag.FRONT_EDIT_JQUERY_BUILTINDefault:TrueWhether or not to use the builtin jquery library or rely on the
library already being present in the final document.FRONT_EDIT_JQUERY_CDNDefault:‘//ajax.googleapis.com/ajax/libs/jquery/’The url to the CDN to use for jquery. The version and file name are
appended. i.e. path/1.11.2/jquery.min.jsFRONT_EDIT_JQUERY_VERSIONDefault:‘1.11.2’The default version of jquery to fetch from the CDN.FRONT_EDIT_LOADER_TEMPLATEDefault:‘front_edit/loader.html’This template is the main boilerplate.FRONT_EDIT_LOGOUT_URL_NAMEDefault:‘admin:logout’Set the name of the logout url.FRONT_EDIT_TOOLBAR_TEMPLATEDefault:‘front_edit/includes/toolbar.html’This template is the admin toolbar.FRONT_EDIT_USE_HINTSDefault:FalseWhether or not to activate the use ofEditHinttags.FRONT_EDIT_VIGENERE_KEYDefault:NoneA vigenere key used to obfuscate edit hints. Optional.Custom Media and JS variablesIf the FRONT_EDIT_CUSTOM_FIELDS setting doesn’t satisfy your needs
you will need to do the following.Change FRONT_EDIT_LOADER_TEMPLATE to your own template, it should
have a different name than ‘front_edit/loader.html’.In your template extend ‘front_edit/loader.html’.Use the block ‘ft_extra’ to set or run javascript code. No script
tags are needed.Use the block ‘ft_extra_media’ to define media such as CSS or JS
files.