Наличие 404 для каждого сайта в мультисайтовой установке Wagtail - PullRequest
6 голосов
/ 04 июня 2019

Я пытаюсь заставить два разных сайта Wagtail иметь свои собственные страницы 404, но, похоже, нет способа указать, какую страницу использовать в качестве страницы 404 в конфигурации "site" в настройках "wagtail" => раздел «сайты», и я не могу загрузить нужные 404, когда помещаю их в соответствующие каталоги приложений:

codebase/
  ./__init__.py
  ./manage.py
  ./apps/
     ./settings.py
     ./urls.py
     ...
     ./django-app-1/
     ./django-app-2/
     ./templates/
        ./404.html
     ./mainsite/
        ./migrations/
        ./static/
        ./templates/
           ./mainsite/
           ./404.html (this 404 always gets used)
     ./spinoff/
        ./migrations/
        ./static/
        ./templates/
           ./spinoff/
           ./404.html (this file never gets used)

Итак, в INSTALLED_APPS имеем:

INSTALLED_APPS = [
  ...django apps...
  ...wagtail apps...

  'apps.mainsite',
  'apps.spinoff',
]

В этом случае основной сайт содержит большую часть всех типов страниц, а дополнительный сайт, который работает на другом домене, использует эти типы страниц , импортируя их из apps.mainsite.

В Wagtail у нас есть две страницы, которые работают как root: Homepage, который является mainsite типом страницы, и Spinoff Homepage, который является spinof типом страницы, который наследуется от типа страницы основного сайта.

В настройках сайтов у нас есть одна запись сайта, которая указывает на mainsite.com, с основным Homepage, установленным как Root, и другая запись сайта, которая указывает на spinoff.com, с домашней страницей spinoff, установленной как root.

Для обоих этих сайтов несуществующий URL-запрос приводит к тому, что 404.html основного сайта начинает использоваться, поэтому возникает вопрос: как сделать так, чтобы несуществующие URL-адреса в домене спин-оффа перешли в 404.html спин-оффа? вместо этого?

1 Ответ

3 голосов
/ 10 июня 2019

Поскольку Wagtail построен на Django, вы можете настроить отображение ошибок .Wagtail's core.view.serve вызывает core.models.page.route, и если маршрут страницы не найден, то он поднимает Http404.Поэтому в urls.py вы бы положили:

from yourapp.views import custom404_view

handler404 = 'yourapp.views.custom404_view'

А в views.py:

from django.http import HttpResponseNotFound

def custom404_view(request, exception):       
    return HttpResponseNotFound('<h1>{}</h1>'.format(request.site))

ЧтоЯ показал выше, возвращает сайт Wagtail, чтобы проиллюстрировать, что сайт доступен в представлении, поэтому в вашем случае просто верните ваш HTML условно на основе сайта.

...