Хакерский способ с декораторами
Вы можете создать декоратор для всех ваших представлений, которые используют project_name
:
def project_lowercase(_func=None):
def checkLowercase(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
request = args[0]
project_name = args[1]
if not project_name.islower():
return HttpResponseRedirect(reverse(your_url_name, kwargs{'project_name' = project_name.lower()))
return func(*args, **kwargs)
return wrapper
return checkLowercase(_func)
Замените your_url_name
тем, что вы назвали своим URL-маршрутом, затем импортируйте функцию и добавьте декоратор над каждой функцией просмотра:
@project_lowercase
def view_project(request, project_name):
# ...
return "Hello World!"
Слагов было бы лучше
В качестве альтернативы, как предлагается в комментариях, и лучшее решение, которое вы должны использовать slug
для сохранить URL-адреса для ваших проектов, посмотрите здесь , чтобы увидеть, как добавить их в свои модели и сгенерировать ярлыки.
Чтобы переместить существующие данные для использования слагов или просто обновить названия проектов, вы может создать перенос данных , который изменит существующие данные в вашей базе данных.