Пространство в url Django

Я создаю строку поиска на своем сайте, все в порядке, если я передаю имена без пробелов, будучи, что я передаю слово строки поиска непосредственно в url, как вы можете себе представить, проблема возникает, когда пользователь вводит слова с пробелом. Я также конвертирую url в utf-8, но я думаю, что django делает это автоматически, потому что даже без конвертации в url, если вы передаете пробел, он появляется в его post% 20, я хотел уточнить, что проблема сохраняется, если вы вводите символы типа:! Кто-нибудь может мне помочь? Заранее спасибо.

urls.py:

from django.urls import path
from dac import views
from django.conf.urls.static import static
from django.conf import settings
from django.urls import re_path #include
from django.contrib import admin

app_name = 'dac'
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'),
    path('doctors/<slug:slug>', views.doctor, name='doctors'),
    path('doctors/search/<slug:slug>/<slug:slug2>', views.doctor_search, name='doctors_search'),
    re_path(r'^doctors_search/search/(?P<slug>.)/(?P<slug2>\d+)$', views.doctor_search, name='doctors_search'),
    path('<slug:slug>', views.doctor_detail, name='doctor_detail'),
    path('signup/', views.sign_up, name="sign_up"),
    path('login/', views.log_in, name='log_in'),
    path('logout/', views.log_out, name='log_out'),
    path('reports/', views.reports, name='reports'),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

views.py:

def doctor(request, slug):
    print("slug: ",slug)

    if request.method == 'POST':
        print("slug: ",slug)
        risposta=request.POST.get("textAnswer")
        risposta=risposta.upper()

        risposta_list=risposta.rsplit()
        print(risposta_list)

        actual_url=request.build_absolute_uri()
        url=re.sub("\d+$", "search/%s/1"%(risposta), actual_url)

        return HttpResponseRedirect(url.encode('utf-8'))
        
    slug=int(slug)
    max_slug=int(round(doctors.objects.count()/28,0))

    if slug==1:
        prew_slug=slug
    else:
        prew_slug=slug-1

    if slug==max_slug:
        nxt_slug=max_slug
    else:
        nxt_slug=slug+1

    doc_list=doctors.objects.all()[(slug-1)*28:slug*28]
    {"doc_list":doc_list}

    return render(request, 'dac/doctors.html', locals())

def doctor_search(request, slug, slug2):
    slug2=int(slug2)
    print("slug1: ",slug)
    print("slug2: ",slug2)

    if request.method=="POST":
        risposta=request.POST.get("textAnswer")
        risposta=risposta.upper()

        actual_url=request.build_absolute_uri()
        url=actual_url.replace(slug, risposta)

        return HttpResponseRedirect(url.encode('utf-8'))

    slug=urllib.parse.unquote(slug)
    doc_list=doctors.objects.filter(frst_nm=slug) | doctors.objects.filter(lst_nm=slug) | doctors.objects.filter(pri_spec=slug)

    if doc_list.count()==0:
        messages.error(request, "no result")

    max_slug=int(round(doc_list.count()/28,0))
    
    if slug2==1:
        prew_slug=slug2
    else:
        prew_slug=slug2-1

    if slug2==max_slug:
        nxt_slug=max_slug
    else:
        nxt_slug=slug2+1
    doc_list=doc_list.all()[(slug2-1)*28:slug2*28]

    {"doc_list":doc_list}

    return render(request, 'dac/doctors_search.html', locals())

Использование :

<str:var>

вместо :

<slug:var>

path('doctors/search/<str:slug>/<str:slug2>', views.doctor_search, name='doctors_search'),
Вернуться на верх