django-在 url 路径中使用相同的路由
django-using same route in url path
我正在做一个项目,我是 Django 的初学者。我将 user.id 从模板传递到 URL 用于两件事,即一件用于配置文件更新,一件用于密码重置。但无论我是点击个人资料更新还是密码重置,它都只会出现一个 URL。我认为问题是我不能在两个 URL 路径中使用相同的路由。
这是我的 url.py:
urlpatterns = [
path('signup', views.signup, name='signup'),
path('login', views.login, name='login'),
path('logout', views.logout, name='logout'),
path('<int:user_id>/', views.chgprofile, name='chgprofile'),
path('<int:user_id>/', views.chgpassword, name='chgpassword'),
]
这是我的模板代码,其中显示了两个按钮:
<a class="btn btn-sm btn-outline-primary" href="{% url 'chgpassword' user.id %}">change password</a>
<a class="btn btn-sm btn-outline-primary" href="{% url 'chgprofile' user.id %}">update profile</a>
有什么办法可以解决吗?请帮忙!
下面这两个:
path('<int:user_id>/', views.chgprofile, name='chgprofile'),
path('<int:user_id>/', views.chgpassword, name='chgpassword'),
实际上有相同的模式,Django 总是匹配第一个找到的 domain/ id between [0-9]
所以要解决这个问题,请更改 URL 的模式,使它们与众不同;
path('update-profile/<int:user_id>/', views.chgprofile, name='chgprofile'),
path('update-password/<int:user_id>/', views.chgpassword, name='chgpassword'),
解释:
首先:在您的模板中,由于 URL 名称,Django 将生成带有斜杠的 url,就像您以前使用原始 HTML.
所做的那样
例如:对于 {% url 'chgpassword' user.id %}
,Django 会查看您的 urls 模式,并通过将 user_id
替换为以下 /update-password/<int:user_id>/
匹配 {% url 'chgpassword' user.id %}
模板中提供的 ID。
THEN: 当你点击 HTML link 时,Django 会寻找第一个匹配项 URL 到 href='/update-password/ id_provided /
'... 并调用关联的视图有了它......这就是为什么像你一样,总是调用相同的视图,在 urls 中没有不同,当 Django 循环遍历 URLs 时,第一个匹配项总是第一个找到的。
我正在做一个项目,我是 Django 的初学者。我将 user.id 从模板传递到 URL 用于两件事,即一件用于配置文件更新,一件用于密码重置。但无论我是点击个人资料更新还是密码重置,它都只会出现一个 URL。我认为问题是我不能在两个 URL 路径中使用相同的路由。 这是我的 url.py:
urlpatterns = [
path('signup', views.signup, name='signup'),
path('login', views.login, name='login'),
path('logout', views.logout, name='logout'),
path('<int:user_id>/', views.chgprofile, name='chgprofile'),
path('<int:user_id>/', views.chgpassword, name='chgpassword'),
]
这是我的模板代码,其中显示了两个按钮:
<a class="btn btn-sm btn-outline-primary" href="{% url 'chgpassword' user.id %}">change password</a>
<a class="btn btn-sm btn-outline-primary" href="{% url 'chgprofile' user.id %}">update profile</a>
有什么办法可以解决吗?请帮忙!
下面这两个:
path('<int:user_id>/', views.chgprofile, name='chgprofile'),
path('<int:user_id>/', views.chgpassword, name='chgpassword'),
实际上有相同的模式,Django 总是匹配第一个找到的 domain/ id between [0-9]
所以要解决这个问题,请更改 URL 的模式,使它们与众不同;
path('update-profile/<int:user_id>/', views.chgprofile, name='chgprofile'),
path('update-password/<int:user_id>/', views.chgpassword, name='chgpassword'),
解释:
首先:在您的模板中,由于 URL 名称,Django 将生成带有斜杠的 url,就像您以前使用原始 HTML.
所做的那样例如:对于 {% url 'chgpassword' user.id %}
,Django 会查看您的 urls 模式,并通过将 user_id
替换为以下 /update-password/<int:user_id>/
匹配 {% url 'chgpassword' user.id %}
模板中提供的 ID。
THEN: 当你点击 HTML link 时,Django 会寻找第一个匹配项 URL 到 href='/update-password/ id_provided /
'... 并调用关联的视图有了它......这就是为什么像你一样,总是调用相同的视图,在 urls 中没有不同,当 Django 循环遍历 URLs 时,第一个匹配项总是第一个找到的。