рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбреЗрдЯрд╛ рд╕рдВрдкрд╛рджрди рдЙрдкрдХрд░рдг рджреЗрдирд╛ рдерд╛ред рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ рдФрд░ рд╕рдВрдкрд╛рджрди рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рди рдХреВрджреЗрдВред рдереЛрдбрд╝рд╛ рдЧреБрдЧреНрд▓рд┐рдВрдЧ, рд╣рдордиреЗ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ django-inplaceedit рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╛рдпрд╛ рдЬреЛ рдЖрдкрдХреЛ рджреГрд╢реНрдп рдбреЗрдЯрд╛ рд╕рдВрдкрд╛рджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
PyPI рд╕реЗ рд╕реНрдерд╛рдкрдирд╛:
pip install django-inplaceedit
рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:
INSTALLED_APPS = ( .... 'inplaceeditform', )
TEMPLATE_CONTEXT_PROCESSORS = ( #...# 'django.core.context_processors.request', #...# )
рдпреЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ
ADAPTOR_INPLACEEDIT_EDIT = 'my_app.perms.MyAdaptorEditInline' # " perms.py, - " INPLACEEDIT_DISABLE_CLICK = False # " Enter" THUMBNAIL_DEBUG = True INPLACEEDIT_EVENT = "click" # " "
рдЕрдкрдиреЗ рдПрдбреЗрдкреНрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдЧреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ред
рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ?
Django-inplaceedit ,
django-inplaceedit-extra-рдлрд╝реАрд▓реНрдб рдХреЛ AutoCompleteManyToManyField рдФрд░ AutoCompleteForeingKeyField рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рджреЛрдиреЛрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдбреЗрдкреНрдЯрд░ рдХреЗ рдирд╛рдо рдореЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдПрдбреЙрдкреНрдЯрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
ADAPTOR_INPLACEEDIT = {'auto_fk': 'inplaceeditform_extra_fields.fields.AdaptorAutoCompleteForeingKeyField', 'auto_m2m': 'inplaceeditform_extra_fields.fields.AdaptorAutoCompleteManyToManyField', 'image_thumb': 'inplaceeditform_extra_fields.fields.AdaptorImageThumbnailField', 'tiny': 'inplaceeditform_extra_fields.fields.AdaptorTinyMCEField',}
Base.html рдореЗрдВ рдХрдиреЗрдХреНрд╢рди
{% load inplace_edit %} {% inplace_toolbar %} or {% inplace_static %}
Urls.py рдореЗрдВ рдХрдиреЗрдХреНрд╢рди
urlpatterns = patterns('', #...# (r'^inplaceeditform/', include('inplaceeditform.urls')), #...# )
рдЕрдзрд┐рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рд╕рдВрдкрд╛рджрди
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рд╕реБрдкрд░рд╕реБрдЕрд░ django-inplaceedit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ, рд╣рдордиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ
ADAPTOR_INPLACEEDIT_EDIT = 'my_app.perms.MyAdaptorEditInline'
рдЕрдм рдФрд░ред
My_app рдХреЗ рдЕрдВрджрд░ perms.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдпрд╣рд╛рдБ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╣реИ
class MyAdaptorEditInline(object): @classmethod def can_edit(cls, adaptor_field): user = adaptor_field.request.user obj = adaptor_field.obj can_edit = False if user.is_anonymous(): pass elif user.is_superuser: can_edit = True else: can_edit = has_permission(obj, user, 'edit') return can_edit
рдореИрдВрдиреЗ рдЗрдирд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдЬрд╛рдВрдЪ рдХреА, рдЗрд╕рд▓рд┐рдП рдореЗрд░реА рдлрд╝рд╛рдЗрд▓ рд╕рд░рд▓ рд╣реИ
class MyAdaptorEditInline(object): @classmethod def can_edit(cls, adaptor_field): can_edit = True return can_edit
рдПрдбрд┐рдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
{% extends "base.html" %} {% load i18n inplace_edit %} ... <fieldset> <legend><span class="has-tip tip-top" data-width="300" title=" ."><wave class="social foundicon-torso"><p> </p></wave></span></legend> <ul class="square"> <li><p class="definition">: </p><p>{% inplace_edit "seeker.user.first_name" adaptor="tiny", auto_height=1, auto_width=1, edit_empty_value=" " %}</p></li> <li><p class="definition"> : </p><p>{% inplace_edit "seeker.age" adaptor="text", auto_height=1, auto_width=1, edit_empty_value=" " %}</p></li> <li><p class="definition"> : </p><p class="city">{% inplace_edit "seeker.city" adaptor="text", auto_height=1, auto_width=1, edit_empty_value="" %}</p></li> </ul> </fieldset>
рдФрд░ рд╕рдВрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рд╕рдВрдкрд╛рджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ:

рдЕрдм рдкреВрд░реЗ рдкреЗрдЬ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯред Textarea рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, WYSIWYG рд╕рдВрдкрд╛рджрдХ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛
рджреЗрдЦреЗрдВ:

рд╕рдВрдкрд╛рджрди рдореЛрдб рдореЗрдВ:

рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдПрдХ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
{% inplace_edit "seeker.resume_workexp|safe" filters_to_show="safe", adaptor="tiny", tag_name_cover="div", auto_height=1, auto_width=1, edit_empty_value=" " %}
рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрдХ рдФрд░ рдПрдХ рд╣реА рдкреГрд╖реНрда рд╣реИ, рдмрд┐рдирд╛ рд░рд┐рдмреВрдЯ рдХреЗред рд╣рдордиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ рдЬрд╛рдБрдЪ рдХреА рдХрд┐ рд╕рдВрдкрд╛рджрди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдереЗ рддрд╛рдХрд┐ рд╣рд░ рдХреЛрдИ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХреЗред
рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ
рдПрдХ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╣рдордиреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП image_thumb рдПрдбреЙрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЪрд┐рддреНрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ:
TemplateSyntaxError at /adverts/cabinet/ Invalid block tag: 'endthumbnail', expected 'elif','else' 'endif'
рдирд┐рд░реНрдгрдп
рддреНрд░реБрдЯрд┐ 'sorl.thumbnail' рдХреЗ рдХрд╛рд░рдг рд╣реИ рдЬреЛ django-inplaceedit-extra-field рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрди рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ django-inplaceedit-extra-рдлрд╝реАрд▓реНрдб рдорд┐рд▓реЗ рдЬрд╣рд╛рдВ рдкрд╣рд▓реА рдмрд╛рд░ sorl.thumbnail рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХреЙрд▓ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
Django-inplaceedit-extra-field рдкреИрдХреЗрдЬ рдХреЗ рдлрд╝реАрд▓реНрдбрд╢реЛрдо рдХрд╛ рд╕рдВрдкрд╛рджрди, рд▓рд╛рдЗрди 96:
from sorl import thumbnail # from easy_thumbnails import thumbnail # easy_thumbnails
рдЬреАрдердм рдкрд░ рд▓рд┐рдВрдХ:
Django-inplaceeditDjango-inplaceedit-рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖реЗрддреНрд░реЛрдВ