【发布时间】:2020-08-19 23:53:52
【问题描述】:
在我的 Django 应用程序中,我有很多网址,包括 /(?P<project_name>[_\w]+)/。
project_name 由用户定义,是Project 模型的属性。
我在project_name 上添加了一个验证器来检查它是否为小写。
所以新名字都是小写的,但一些旧名字包括大写字符。
我想将所有存储的名称更改为小写,但同时,我不希望用户在尝试访问包含大写字符的旧项目名称的 URL 之一时出错。
由于我有很多 url 和很多视图,我不想手动更新每个 .lower() project_name。
有没有办法将包括/<project_NAME>/在内的所有网址重定向到/<project_name>/?
【问题讨论】:
-
为什么
project_names 在第一种情况下是大写的?通常,为此使用slug。 -
嗯,这是一个错误……我现在想更正一下。
-
我认为将
SlugFields 添加到您的模型中可能会更容易。特别是因为DetailViews 和UpdateViews 支持 slug(它们会自动过滤)。此外,slug 不仅是小写字母,它还删除了变音符号和其他在 URL 中引入百分比编码的字符,因此它会使 URL 更“干净”。 -
编写一个自定义中间件来检查 URL 并进行重定向。
-
@KevinChristopherHenry 您能否详细说明一下如何使用中间件来完成?