Python url在表单提交时没有更改?

Python url在表单提交时没有更改?,python,django,Python,Django,我有一些类别,如餐厅、体育健身、快餐等。。我想创建包含所有类别的下拉菜单,并在每次选择不同类别时显示不同的类别项目: HTML: 然后从“选择第二个选项”中选择值为“sportfitness”,刷新页面并显示类别sportfitness中的项目,但url仍然为http://localhost:8000/objects/all/restaurants/1/ 在此之后,选择第三个选项并再次刷新carservice页面,这次url更改为http://localhost:8000/objects/all

我有一些类别,如餐厅、体育健身、快餐等。。我想创建包含所有类别的下拉菜单,并在每次选择不同类别时显示不同的类别项目:

HTML:

然后从“选择第二个选项”中选择值为“sportfitness”,刷新页面并显示类别sportfitness中的项目,但url仍然为http://localhost:8000/objects/all/restaurants/1/ 在此之后,选择第三个选项并再次刷新carservice页面,这次url更改为http://localhost:8000/objects/all/sportfitness/1/ 而不是carservices,因此它有延迟1次

URL.py:

我可以根据需要提供更多信息。可能这不是Django问题,这是常见的编程问题,我不太确定。

为什么会发生这种情况? 呈现函数不会更改URL

如何解决? 不要对视图返回的类别执行post请求,而是对所选类别执行post请求

e、 g.如果您当前的url是http://localhost:8000/objects/all/restaurants/1/,然后选择sportfitness,而不是在上执行post请求http://localhost:8000/objects/all/restaurants/1/ 在上发布请求http://localhost:8000/objects/all/sportfitness/1/.

这就是你可以做到的:

var url = "{% url 'show-all-objects' category=category page_num=1 %}";
var urlCategory = "{{ category }}";

$('#select_sort_category').on('change', function () {
    $('#sort_form').attr('action', url.replace(urlCategory, this.value)).submit();
});

这回答了你的问题吗?有点。。我理解这个问题,但如何更改POST请求?url来自此处{%url'显示所有对象'类别=类别页面_num=1%}AJAX可能吗?要从select中获得价值,请避免使用AJAX,尽管我们也可以使用AJAX。只需检测点击事件,修改url,然后提交即可。要获取值,请执行var catagory=$select\u sort\u category.val;好的,我做到了,在你们的答案中也加入了代码,这对我很有帮助,现在答案已经完成了。我很好奇,没有JS有没有办法做到这一点?可能要将渲染更改为其他内容?
http://localhost:8000/objects/all/restaurants/1/
from django.urls import path, re_path
from . import views

urlpatterns = [
    path('user/<int:pk>/', views.UserObjectsView.as_view(), name='user-objects'),
    path('add/<str:category>/', views.add_object, name='add-object'),
    path('<str:category>/<int:pk>/<int:page_num>/', views.show_object, name='show-object'),
    #path('all/<str:category>/<int:page_num>/', views.show_all_objects, name="show-all-objects"),
    re_path(r'all/(?P<category>\w+)/(?P<page_num>\d+)/?/(?P<city>\d+)?', views.show_all_objects, name="show-all-objects"),
]
def show_all_objects(request, category, page_num, city=None):
    params_map = {
        'restaurants': Restaurant,
        'sportfitness': SportFitness,
        'carservice': CarService,
        'beautysalon': BeautySalon,
        'fastfood': FastFood,
        'carwash': CarWash,
        'fun': Fun,
        'other': Other,
    }

    if request.method == 'POST':
        category = request.POST.get('select_sort_category')

    objects = Object.objects.instance_of(params_map.get(category)).order_by('rating')


    if city is not None:
        objects = objects.filter(city=city)

    paginator = Paginator(objects, 2)
    objects = paginator.get_page(page_num)

    context = {
        'objects': objects,
        'category': category,
        'page_num': page_num,
    }

    return render(request, 'show_all_objects.html', context)
var url = "{% url 'show-all-objects' category=category page_num=1 %}";
var urlCategory = "{{ category }}";

$('#select_sort_category').on('change', function () {
    $('#sort_form').attr('action', url.replace(urlCategory, this.value)).submit();
});