首页 > 解决方案 > 如何修改提交生成的url

问题描述

我正在使用 python 3.6 和 django 3.0X

我遇到的问题是:

我想要的流程是当用户选择一个品牌并提交时。url 路径将生成为http://127.0.0.1:8000/show/car:Ford并链接到 url.py 以传递给 show.html

但是在提交时,生成的 url 路径为http://127.0.0.1:8000/show?car=Ford

如何获得符合 url.py 的正确 url 路径。这就是为什么有一个'?和 '=' 在 url 路径中?

或者如何修改 url.py 以满足 search.html 生成的 url 路径?

以下是我的代码:

搜索.html

<form name='my form' action='/show' method='GET'>
<label for='brand'> Select a brand </label>
<select name='car'>
    {% for m in maker %}
        <option value= '{{ m }}'> {{ m }} </option>
    {% endfor %}
</select><br> 
<input type='submit' value='Go' />

显示.html

Model:<br>
{% for m in model %}
{{ m }}
{% endfor %}
<br>

网址.py

urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index),
path('index/', views.index),
path('welcome/', views.welcome),
path('django_plotly_dash/', include('django_plotly_dash.urls')),
path('search/', views.search),
path('index/buttons.html', views.buttons),
path('show/car:<str:brand>', views.show, name='show-url')

]

视图.py

def search(request):
    car = models.Cars.objects.all()
    df_car = read_frame(car)
    maker = list(df_car['make'].str.capitalize().unique())
    #maker = models.Cars.objects.values('make').distinct()
    return render(request, 'search.html', locals())


def show(request, brand):
    car = models.Cars.objects.filter(make=brand)
    df_car = read_frame(car)
    model = df_car.model.unique()

    return render(request, 'show.html', locals())

标签: pythondjango

解决方案


不,您不能更改 URL 的工作方式。问号将常规 URL 和查询分开 - 这是传递给 URL 的附加信息。如果您强制更改它,则 URL 将无法正确加载,而且,这样做没有任何意义。

如果您想知道类似的东西是否path('whatever/<str:name>, ...)会以带问号的格式工作,它会的。


推荐阅读