Пытаетесь преобразовать строку в urls.py в django во все строчные буквы? - PullRequest
1 голос
/ 18 января 2020

По сути, я пытаюсь преобразовать динамический c URL в виде example.com/products/productName/ в URL, где productName - все строчные. В urls.py у меня есть

    path('products/<str:productName>/', product_detail_view)

... это должно перенаправить на страницу сведений о продукте с productName (что бы это ни было) в нижнем регистре.

Я попытался добавить .lower () к 'products //', и это превратило поле productName в productname, которое не распознается в файле models.py.

Я тогда попробовал «продукты //», которые тоже вообще не работали? У кого-нибудь есть предложения?

Ответы [ 2 ]

1 голос
/ 18 января 2020

Вы можете создать базовый c RedirectView , который будет перенаправлять на подробный вид с именем продукта в нижнем регистре

from django.views.generic.base import RedirectView

class ProductLowerCaseRedirectView(RedirectView):

    permanent = True
    query_string = True
    pattern_name = 'product_detail_view'

    def get_redirect_url(self, *args, **kwargs):
        kwargs['productName'] = kwargs['productName'].lower()
        return super().get_redirect_url(*args, **kwargs)

Теперь вы можете использовать тот факт, что Django пробегает ваши URL-адреса последовательно в ваших интересах. Вы создаете шаблон, который только принимает названия продуктов в нижнем регистре, это ваш основной вид, у вас также есть представление перенаправления, принимающее все запросы по тому же пути, но не в нижнем регистре

re_path(r'^products/(?P<productName>[a-z]*)/$', product_detail_view, name='product_detail_view')    
path('products/<str:productName>/', ProductLowerCaseRedirectView.as_view())
0 голосов
/ 18 января 2020

Ваши URL должны быть такими, как

path('products/<str:product_name>',yourpostdetailview)

В представлениях получите product_name и преобразовать в нижний регистр.

...