# Advanced

* [Images](images/index.md)
  * [Generating renditions in Python](images/renditions.md)
  * [Animated GIF support](images/animated_gifs.md)
  * [Image file formats](images/image_file_formats.md)
  * [Custom image models](images/custom_image_model.md)
  * [Changing rich text representation](images/changing_rich_text_representation.md)
  * [Feature detection](images/feature_detection.md)
  * [Dynamic image serve view](images/image_serve_view.md)
  * [Focal points](images/focal_points.md)
  * [Title generation on upload](images/title_generation_on_upload.md)
* [Documents](documents/index.md)
  * [Documents overview](documents/overview.md)
  * [Custom document model](documents/custom_document_model.md)
  * [Custom document upload form](documents/custom_document_upload_form.md)
  * [Storing and serving](documents/storing_and_serving.md)
  * [Title generation on upload](documents/title_generation_on_upload.md)
  * [Testing documents](documents/testing.md)
* [Icons](icons.md)
  * [Add a custom icon](icons.md#add-a-custom-icon)
  * [Icon template tag](icons.md#icon-template-tag)
  * [Changing icons via hooks](icons.md#changing-icons-via-hooks)
  * [Changing icons via template override](icons.md#changing-icons-via-template-override)
  * [Available icons](icons.md#available-icons)
* [Embedded content](embeds.md)
  * [Embedding content on your site](embeds.md#embedding-content-on-your-site)
  * [Configuring embed “finders”](embeds.md#configuring-embed-finders)
  * [The `Embed` model](embeds.md#the-embed-model)
* [Tagging](tags.md)
  * [Adding tags to a page model](tags.md#adding-tags-to-a-page-model)
  * [Custom tag models](tags.md#custom-tag-models)
  * [Disabling free tagging](tags.md#disabling-free-tagging)
  * [Managing tags as snippets](tags.md#managing-tags-as-snippets)
* [How to add Wagtail into an existing Django project](add_to_django_project.md)
  * [Middleware (`settings.py`)](add_to_django_project.md#middleware-settings-py)
  * [Apps (`settings.py`)](add_to_django_project.md#apps-settings-py)
  * [URL Patterns](add_to_django_project.md#url-patterns)
  * [Ready to Use Example Configuration Files](add_to_django_project.md#ready-to-use-example-configuration-files)
* [Performance](performance.md)
  * [Cache](performance.md#cache)
  * [Image URLs](performance.md#image-urls)
  * [Prefetch image rendition](performance.md#prefetch-image-rendition)
  * [Frontend caching proxy](performance.md#frontend-caching-proxy)
  * [Page URLs](performance.md#page-urls)
  * [Search](performance.md#search)
  * [Database](performance.md#database)
  * [Template fragment caching](performance.md#template-fragment-caching)
  * [Page cache key](performance.md#page-cache-key)
  * [Django](performance.md#django)
* [Internationalization](i18n.md)
  * [Multi-language content](i18n.md#multi-language-content)
  * [Alternative internationalization approach: wagtail-modeltranslation](i18n.md#alternative-internationalization-approach-wagtail-modeltranslation)
  * [Wagtail admin translations](i18n.md#wagtail-admin-translations)
  * [Change Wagtail admin language on a per-user basis](i18n.md#change-wagtail-admin-language-on-a-per-user-basis)
  * [Changing the primary language of your Wagtail installation](i18n.md#changing-the-primary-language-of-your-wagtail-installation)
* [Private pages](privacy.md)
  * [Private collections (restricting documents)](privacy.md#private-collections-restricting-documents)
  * [Setting up a login page](privacy.md#setting-up-a-login-page)
  * [Setting the default privacy restriction](privacy.md#setting-the-default-privacy-restriction)
  * [Setting up a global “password required” page](privacy.md#setting-up-a-global-password-required-page)
  * [Setting a “password required” page for a specific page type](privacy.md#setting-a-password-required-page-for-a-specific-page-type)
* [Customizing Wagtail](customization/index.md)
  * [Customizing the editing interface](customization/page_editing_interface.md)
  * [Custom page listings](customization/custom_page_listings.md)
  * [Customizing admin templates](customization/admin_templates.md)
  * [Custom user models](customization/custom_user_models.md)
  * [How to build custom StreamField blocks](customization/streamfield_blocks.md)
* [Third-party tutorials](third_party_tutorials.md)
  * [Tip](third_party_tutorials.md#tip)
* [Testing your Wagtail site](testing.md)
  * [WagtailPageTestCase](testing.md#wagtailpagetestcase)
  * [Form data helpers](testing.md#module-wagtail.test.utils.form_data)
  * [Creating Page objects within tests](testing.md#creating-page-objects-within-tests)
  * [Fixtures](testing.md#fixtures)
* [Wagtail API](api/index.md)
  * [Wagtail API v2 configuration guide](api/v2/configuration.md)
  * [Wagtail API v2 usage guide](api/v2/usage.md)
  * [How to set up Django Ninja](api/django-ninja.md)
* [How to build a site with AMP support](amp.md)
  * [Overview](amp.md#overview)
  * [Creating the second page tree](amp.md#creating-the-second-page-tree)
  * [Making pages aware of “AMP mode”](amp.md#making-pages-aware-of-amp-mode)
  * [Write a template context processor so that AMP state can be checked in templates](amp.md#write-a-template-context-processor-so-that-amp-state-can-be-checked-in-templates)
  * [Using a different page template when AMP mode is active](amp.md#using-a-different-page-template-when-amp-mode-is-active)
  * [Overriding the `{% image %}` tag to output `<amp-img>` tags](amp.md#overriding-the-image-tag-to-output-amp-img-tags)
* [Accessibility considerations](accessibility_considerations.md)
  * [Content modeling](accessibility_considerations.md#content-modeling)
  * [Accessibility in templates](accessibility_considerations.md#accessibility-in-templates)
  * [Authoring accessible content](accessibility_considerations.md#authoring-accessible-content)
  * [Accessibility resources](accessibility_considerations.md#id6)
* [Sustainability considerations](sustainability_considerations.md)
  * [Standards](sustainability_considerations.md#standards)
  * [Guidelines](sustainability_considerations.md#guidelines)
  * [Quantifying emissions](sustainability_considerations.md#quantifying-emissions)
* [About StreamField BoundBlocks and values](boundblocks_and_values.md)
* [Multi-site, multi-instance and multi-tenancy](multi_site_multi_instance_multi_tenancy.md)
  * [Multi-site](multi_site_multi_instance_multi_tenancy.md#multi-site)
  * [Multi-instance](multi_site_multi_instance_multi_tenancy.md#multi-instance)
  * [Multi-tenancy](multi_site_multi_instance_multi_tenancy.md#multi-tenancy)
* [How to use a redirect with Form builder to prevent double submission](formbuilder_routablepage_redirect.md)
* [StreamField migrations](streamfield_migrations.md)
  * [Migrating RichTextFields to StreamField](streamfield_migrations.md#migrating-richtextfields-to-streamfield)
  * [StreamField data migrations](streamfield_migrations.md#streamfield-data-migrations)
* [StreamField validation](streamfield_validation.md)
  * [Controlling where error messages are rendered](streamfield_validation.md#controlling-where-error-messages-are-rendered)
* [Manage the reference index](reference_index.md)
  * [Configuration](reference_index.md#configuration)
  * [Maintenance](reference_index.md#maintenance)
  * [Guarantees and non-guarantees](reference_index.md#guarantees-and-non-guarantees)
  * [Using the ReferenceIndex API](reference_index.md#using-the-referenceindex-api)
  * [Enforcing stricter deletion rules](reference_index.md#enforcing-stricter-deletion-rules)
* [Headless support](headless.md)
  * [API](headless.md#api)
  * [Functionality](headless.md#functionality)
  * [Frontend](headless.md#frontend)
  * [Supporting platforms](headless.md#supporting-platforms)
  * [Additional resources](headless.md#additional-resources)
