django - 在 Django handler404 重定向中访问请求的 URL?
问题描述
我确信这有一个非常简单的答案,但我在 Google 和 Stack Overflow 上花了几个小时却没有找到任何答案。
我正在为多语言网站构建 Django CMS。URLS 采用以下形式:
https://example.com/xx/subject
其中 x 是一种语言的两个字母代码(en=English,fr=French)。例如:
https://example.com/en/about-us
https://example.com/fr/a-propos
我需要能够从 handler404 视图中访问请求的 URL,以便为访问者提供适当的内容。
我目前在 Django 应用程序中有一个有效的 404 重定向:
项目.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',)
推荐阅读
- arrays - Angular 6:将 JSON 转换为数组后如何显示
- computer-science - 无法在输入上写入的固定尺寸磁带图灵机相当于 DFA
- php - 在 Azure 上安装 OctoberCMS
- java - 从 Firestore 下载数据延迟
- c# - 使用 .NET 核心执行远程验证
- python - 将列表附加到另一个列表时的奇怪输出
- linux-kernel - 将 linux 内核模块永久列入黑名单
- javascript - 如何在我的 html 文件中显示 es6 组件?
- docker - 无法弄清楚如何正确使用 cmd 在 docker 中执行脚本
- ruby - 为其他资源操作指定参数名称