kopia lustrzana https://github.com/wagtail/wagtail
Make various local variables in CreateView into instance variables
rodzic
dd72949bf1
commit
a21908d42c
|
@ -44,99 +44,108 @@ def add_subpage(request, parent_page_id):
|
||||||
|
|
||||||
class CreateView(View):
|
class CreateView(View):
|
||||||
def dispatch(self, request, content_type_app_name, content_type_model_name, parent_page_id):
|
def dispatch(self, request, content_type_app_name, content_type_model_name, parent_page_id):
|
||||||
parent_page = get_object_or_404(Page, id=parent_page_id).specific
|
self.parent_page = get_object_or_404(Page, id=parent_page_id).specific
|
||||||
parent_page_perms = parent_page.permissions_for_user(request.user)
|
self.parent_page_perms = self.parent_page.permissions_for_user(self.request.user)
|
||||||
if not parent_page_perms.can_add_subpage():
|
if not self.parent_page_perms.can_add_subpage():
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
try:
|
try:
|
||||||
content_type = ContentType.objects.get_by_natural_key(content_type_app_name, content_type_model_name)
|
self.content_type = ContentType.objects.get_by_natural_key(content_type_app_name, content_type_model_name)
|
||||||
except ContentType.DoesNotExist:
|
except ContentType.DoesNotExist:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
# Get class
|
# Get class
|
||||||
page_class = content_type.model_class()
|
self.page_class = self.content_type.model_class()
|
||||||
|
|
||||||
# Make sure the class is a descendant of Page
|
# Make sure the class is a descendant of Page
|
||||||
if not issubclass(page_class, Page):
|
if not issubclass(self.page_class, Page):
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
# page must be in the list of allowed subpage types for this parent ID
|
# page must be in the list of allowed subpage types for this parent ID
|
||||||
if page_class not in parent_page.creatable_subpage_models():
|
if self.page_class not in self.parent_page.creatable_subpage_models():
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
if not page_class.can_create_at(parent_page):
|
if not self.page_class.can_create_at(self.parent_page):
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
for fn in hooks.get_hooks('before_create_page'):
|
for fn in hooks.get_hooks('before_create_page'):
|
||||||
result = fn(request, parent_page, page_class)
|
result = fn(self.request, self.parent_page, self.page_class)
|
||||||
if hasattr(result, 'status_code'):
|
if hasattr(result, 'status_code'):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
page = page_class(owner=request.user)
|
self.page = self.page_class(owner=self.request.user)
|
||||||
edit_handler = page_class.get_edit_handler()
|
self.edit_handler = self.page_class.get_edit_handler()
|
||||||
edit_handler = edit_handler.bind_to(request=request, instance=page)
|
self.edit_handler = self.edit_handler.bind_to(request=self.request, instance=self.page)
|
||||||
form_class = edit_handler.get_form_class()
|
self.form_class = self.edit_handler.get_form_class()
|
||||||
|
|
||||||
next_url = get_valid_next_url_from_request(request)
|
self.next_url = get_valid_next_url_from_request(self.request)
|
||||||
|
|
||||||
if request.method == 'POST':
|
if self.request.method == 'POST':
|
||||||
form = form_class(request.POST, request.FILES, instance=page,
|
self.form = self.form_class(
|
||||||
parent_page=parent_page)
|
self.request.POST, self.request.FILES, instance=self.page, parent_page=self.parent_page
|
||||||
|
)
|
||||||
|
|
||||||
if form.is_valid():
|
if self.form.is_valid():
|
||||||
page = form.save(commit=False)
|
self.page = self.form.save(commit=False)
|
||||||
|
|
||||||
is_publishing = bool(request.POST.get('action-publish')) and parent_page_perms.can_publish_subpage()
|
is_publishing = bool(self.request.POST.get('action-publish')) and self.parent_page_perms.can_publish_subpage()
|
||||||
is_submitting = bool(request.POST.get('action-submit')) and parent_page.has_workflow
|
is_submitting = bool(self.request.POST.get('action-submit')) and self.parent_page.has_workflow
|
||||||
|
|
||||||
if not is_publishing:
|
if not is_publishing:
|
||||||
page.live = False
|
self.page.live = False
|
||||||
|
|
||||||
# Save page
|
# Save page
|
||||||
parent_page.add_child(instance=page)
|
self.parent_page.add_child(instance=self.page)
|
||||||
|
|
||||||
# Save revision
|
# Save revision
|
||||||
revision = page.save_revision(user=request.user, log_action=False)
|
revision = self.page.save_revision(user=self.request.user, log_action=False)
|
||||||
|
|
||||||
# Publish
|
# Publish
|
||||||
if is_publishing:
|
if is_publishing:
|
||||||
for fn in hooks.get_hooks('before_publish_page'):
|
for fn in hooks.get_hooks('before_publish_page'):
|
||||||
result = fn(request, page)
|
result = fn(self.request, self.page)
|
||||||
if hasattr(result, 'status_code'):
|
if hasattr(result, 'status_code'):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
revision.publish(user=request.user)
|
revision.publish(user=self.request.user)
|
||||||
|
|
||||||
for fn in hooks.get_hooks('after_publish_page'):
|
for fn in hooks.get_hooks('after_publish_page'):
|
||||||
result = fn(request, page)
|
result = fn(self.request, self.page)
|
||||||
if hasattr(result, 'status_code'):
|
if hasattr(result, 'status_code'):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
# Submit
|
# Submit
|
||||||
if is_submitting:
|
if is_submitting:
|
||||||
workflow = page.get_workflow()
|
workflow = self.page.get_workflow()
|
||||||
workflow.start(page, request.user)
|
workflow.start(self.page, self.request.user)
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
if is_publishing:
|
if is_publishing:
|
||||||
if page.go_live_at and page.go_live_at > timezone.now():
|
if self.page.go_live_at and self.page.go_live_at > timezone.now():
|
||||||
messages.success(request, _("Page '{0}' created and scheduled for publishing.").format(page.get_admin_display_title()), buttons=[
|
messages.success(
|
||||||
messages.button(reverse('wagtailadmin_pages:edit', args=(page.id,)), _('Edit'))
|
self.request,
|
||||||
])
|
_("Page '{0}' created and scheduled for publishing.").format(self.page.get_admin_display_title()),
|
||||||
|
buttons=[
|
||||||
|
messages.button(reverse('wagtailadmin_pages:edit', args=(self.page.id,)), _('Edit'))
|
||||||
|
]
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
buttons = []
|
buttons = []
|
||||||
if page.url is not None:
|
if self.page.url is not None:
|
||||||
buttons.append(messages.button(page.url, _('View live'), new_window=True))
|
buttons.append(messages.button(self.page.url, _('View live'), new_window=True))
|
||||||
buttons.append(messages.button(reverse('wagtailadmin_pages:edit', args=(page.id,)), _('Edit')))
|
buttons.append(messages.button(reverse('wagtailadmin_pages:edit', args=(self.page.id,)), _('Edit')))
|
||||||
messages.success(request, _("Page '{0}' created and published.").format(page.get_admin_display_title()), buttons=buttons)
|
messages.success(
|
||||||
|
self.request,
|
||||||
|
_("Page '{0}' created and published.").format(self.page.get_admin_display_title()),
|
||||||
|
buttons=buttons
|
||||||
|
)
|
||||||
|
|
||||||
elif is_submitting:
|
elif is_submitting:
|
||||||
buttons = []
|
buttons = []
|
||||||
if page.is_previewable():
|
if self.page.is_previewable():
|
||||||
buttons.append(
|
buttons.append(
|
||||||
messages.button(
|
messages.button(
|
||||||
reverse('wagtailadmin_pages:view_draft', args=(page.id,)),
|
reverse('wagtailadmin_pages:view_draft', args=(self.page.id,)),
|
||||||
_('View draft'),
|
_('View draft'),
|
||||||
new_window=True
|
new_window=True
|
||||||
),
|
),
|
||||||
|
@ -144,58 +153,58 @@ class CreateView(View):
|
||||||
|
|
||||||
buttons.append(
|
buttons.append(
|
||||||
messages.button(
|
messages.button(
|
||||||
reverse('wagtailadmin_pages:edit', args=(page.id,)),
|
reverse('wagtailadmin_pages:edit', args=(self.page.id,)),
|
||||||
_('Edit')
|
_('Edit')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
messages.success(
|
messages.success(
|
||||||
request,
|
self.request,
|
||||||
_("Page '{0}' created and submitted for moderation.").format(page.get_admin_display_title()),
|
_("Page '{0}' created and submitted for moderation.").format(self.page.get_admin_display_title()),
|
||||||
buttons=buttons
|
buttons=buttons
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
messages.success(request, _("Page '{0}' created.").format(page.get_admin_display_title()))
|
messages.success(self.request, _("Page '{0}' created.").format(self.page.get_admin_display_title()))
|
||||||
|
|
||||||
for fn in hooks.get_hooks('after_create_page'):
|
for fn in hooks.get_hooks('after_create_page'):
|
||||||
result = fn(request, page)
|
result = fn(self.request, self.page)
|
||||||
if hasattr(result, 'status_code'):
|
if hasattr(result, 'status_code'):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
if is_publishing or is_submitting:
|
if is_publishing or is_submitting:
|
||||||
# we're done here
|
# we're done here
|
||||||
if next_url:
|
if self.next_url:
|
||||||
# redirect back to 'next' url if present
|
# redirect back to 'next' url if present
|
||||||
return redirect(next_url)
|
return redirect(self.next_url)
|
||||||
# redirect back to the explorer
|
# redirect back to the explorer
|
||||||
return redirect('wagtailadmin_explore', page.get_parent().id)
|
return redirect('wagtailadmin_explore', self.page.get_parent().id)
|
||||||
else:
|
else:
|
||||||
# Just saving - remain on edit page for further edits
|
# Just saving - remain on edit page for further edits
|
||||||
target_url = reverse('wagtailadmin_pages:edit', args=[page.id])
|
target_url = reverse('wagtailadmin_pages:edit', args=[self.page.id])
|
||||||
if next_url:
|
if self.next_url:
|
||||||
# Ensure the 'next' url is passed through again if present
|
# Ensure the 'next' url is passed through again if present
|
||||||
target_url += '?next=%s' % urlquote(next_url)
|
target_url += '?next=%s' % urlquote(self.next_url)
|
||||||
return redirect(target_url)
|
return redirect(target_url)
|
||||||
else:
|
else:
|
||||||
messages.validation_error(
|
messages.validation_error(
|
||||||
request, _("The page could not be created due to validation errors"), form
|
self.request, _("The page could not be created due to validation errors"), self.form
|
||||||
)
|
)
|
||||||
has_unsaved_changes = True
|
self.has_unsaved_changes = True
|
||||||
else:
|
else:
|
||||||
signals.init_new_page.send(sender=CreateView, page=page, parent=parent_page)
|
signals.init_new_page.send(sender=CreateView, page=self.page, parent=self.parent_page)
|
||||||
form = form_class(instance=page, parent_page=parent_page)
|
self.form = self.form_class(instance=self.page, parent_page=self.parent_page)
|
||||||
has_unsaved_changes = False
|
self.has_unsaved_changes = False
|
||||||
|
|
||||||
edit_handler = edit_handler.bind_to(form=form)
|
self.edit_handler = self.edit_handler.bind_to(form=self.form)
|
||||||
|
|
||||||
return TemplateResponse(request, 'wagtailadmin/pages/create.html', {
|
return TemplateResponse(self.request, 'wagtailadmin/pages/create.html', {
|
||||||
'content_type': content_type,
|
'content_type': self.content_type,
|
||||||
'page_class': page_class,
|
'page_class': self.page_class,
|
||||||
'parent_page': parent_page,
|
'parent_page': self.parent_page,
|
||||||
'edit_handler': edit_handler,
|
'edit_handler': self.edit_handler,
|
||||||
'action_menu': PageActionMenu(request, view='create', parent_page=parent_page),
|
'action_menu': PageActionMenu(self.request, view='create', parent_page=self.parent_page),
|
||||||
'preview_modes': page.preview_modes,
|
'preview_modes': self.page.preview_modes,
|
||||||
'form': form,
|
'form': self.form,
|
||||||
'next': next_url,
|
'next': self.next_url,
|
||||||
'has_unsaved_changes': has_unsaved_changes,
|
'has_unsaved_changes': self.has_unsaved_changes,
|
||||||
})
|
})
|
||||||
|
|
Ładowanie…
Reference in New Issue