Я уверен, что ответ на этот вопрос тривиален, но я потратил пару часов с Google и переполнением стека, не найдя ответа.
Я создаю Django CMS для многоязычного веб-сайта. URL-адреса принимают форму:
https://example.com/xx/subject
где x - двухбуквенный код языка (en = английский, fr = французский). Например:
https://example.com/en/about-us
https://example.com/fr/a-propos
Мне нужно иметь доступ к запрошенному URL-адресу из представления handler404, чтобы предоставить посетителям соответствующий контент.
В настоящее время у меня есть рабочий редирект 404 в приложении Django:
project.urls.py
handler404 = 'myapp.views.error404'
myapp.views.py
def PageView(request, lang, subject):
[creates a page with DB content based on lang & subject]
def error404(request, *args, **kwargs):
return PageView(request,'en','404page',)
Я хотел бы знать, какой запрашиваемый URL был , чтобы перенаправить посетителя на страницу на его языке.
В этой системе страница 404 будет страницей в CMS, как и любая другая, поэтому она будет редактируемой пользователем CMS (я не использую шаблоны Django для создания страниц).
В БД будет одна запись «404 страницы» для каждого языка.
Вот нерабочий пример того, что я ищу:
def error404(request, *args, **kwargs):
lang = args[0]
subject = args[1]
if lang = 'fr':
return PageView(request,'fr','error404',)
else:
return PageView(request,'en','error404',)
Если кто-то запросит example.com / fr / quelque-selected , я хочу показать им содержимое из fr / 404Page .
Если кто-то запросит example.com / mlkqdjsf или example.com / ru / not-a-page , я хочу показать им содержимое ru / 404page .
В обоих случаях я буду использовать PageView , который я использую для создания обычных страниц сайта.