在 Django handler404 重定向中访问请求的 URL?
Access to the requested URL within a Django handler404 redirection?
我确信这有一个非常简单的答案,但我花了几个小时在 Google 和 Stack Overflow 上,但没有找到任何答案。
我正在为多语言网站构建 Django CMS。 URLS 的形式为:
https://example.com/xx/subject
其中 x 是一种语言的两个字母代码(en=英语,fr=法语)。例如:
https://example.com/en/about-us
https://example.com/fr/a-propos
我需要能够从 handler404 视图中访问请求的 URL 以向访问者提供适当的内容。
我目前在 Django 应用程序中有一个有效的 404 重定向:
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 模板创建页面)。
数据库中每种语言都会有一个“404page”条目。
这是我正在寻找的那种东西的非工作示例:
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-chose,我想向他们展示来自 fr/404Page 的内容。
如果有人请求 example.com/mlkqdjsf 或 example.com/en/not-a-page,我想向他们展示内容来自 en/404page.
在这两种情况下,我都将使用 PageView 视图来构建常规站点页面。
我想你可以用 request.path
:
def error404(request, *args, **kwargs):
lang = request.path.split('/')[1]
if lang = 'fr':
return PageView(request,'fr','error404',)
else:
return PageView(request,'en','error404',)
如果你只对语言感兴趣,可以使用get_language_from_request
功能:
from django.utils import translation
def error404(request, *args, **kwargs):
language = translation.get_language_from_request(request, check_path=True)
return PageView(request, language, 'error404')
check_path
参数是先检查URL是否以语言代码开头,我想这就是你想要的。
查看有关 get_language_from_request
和其他翻译相关功能的 django 文档。
我确信这有一个非常简单的答案,但我花了几个小时在 Google 和 Stack Overflow 上,但没有找到任何答案。
我正在为多语言网站构建 Django CMS。 URLS 的形式为:
https://example.com/xx/subject
其中 x 是一种语言的两个字母代码(en=英语,fr=法语)。例如:
https://example.com/en/about-us
https://example.com/fr/a-propos
我需要能够从 handler404 视图中访问请求的 URL 以向访问者提供适当的内容。
我目前在 Django 应用程序中有一个有效的 404 重定向:
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 模板创建页面)。
数据库中每种语言都会有一个“404page”条目。
这是我正在寻找的那种东西的非工作示例:
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-chose,我想向他们展示来自 fr/404Page 的内容。
如果有人请求 example.com/mlkqdjsf 或 example.com/en/not-a-page,我想向他们展示内容来自 en/404page.
在这两种情况下,我都将使用 PageView 视图来构建常规站点页面。
我想你可以用 request.path
:
def error404(request, *args, **kwargs):
lang = request.path.split('/')[1]
if lang = 'fr':
return PageView(request,'fr','error404',)
else:
return PageView(request,'en','error404',)
如果你只对语言感兴趣,可以使用get_language_from_request
功能:
from django.utils import translation
def error404(request, *args, **kwargs):
language = translation.get_language_from_request(request, check_path=True)
return PageView(request, language, 'error404')
check_path
参数是先检查URL是否以语言代码开头,我想这就是你想要的。
查看有关 get_language_from_request
和其他翻译相关功能的 django 文档。