因此,我在html中有一个图像重定向到某个url:
<div class="image">
<a href="/accounts/startlistening/{{i.song_id}}">
<img src="{{i.image.url}}">
</a>
</div>
这里,i.song_id给出了一个整数值。
url.py是:
urlpatterns = [
url('register/', views.registration, name="signup"),
url('login/', views.loginUser, name="login"),
url('logout/', views.logoutUser, name="logout"),
url('upload/', views.upload, name="upload"),
url('startlistening/', views.startlistening, name="startlistening"),
url('startlistening/<int:id>', views.player, name="player")
]
我的球员的views.py是:
def player(request, id):
song = Song.objects.filter(song_id = id).first()
return render(request, 'accounts/player.html',{'song':song})
但出于某些原因,在运行服务器上,单击图像时,它会更改url,但不会重定向到player.html,例如:单击它时,它从http://127.0.0.1:8000/accounts/startlistening/更改为http://127.0.0.1:8000/accounts/startlistening/17,但内容是相同的。
编辑:在我将所有url更改为urls.py中的路径后工作
发布于 2021-07-03 07:14:52
您已经使用了旧的url
function (自从Django 3.1就不再推荐使用re_path
了,如果需要regex的话,应该使用re_path
)而不是path
function。因此,这里所发生的是您的模式startlistening/
与字符串startlistening/17
匹配,您可以通过尝试下面的代码片段来看到这一点:
print(re.search(r'startlistening/', 'startlistening/17')) # returns a match
此外,<int:id>
在使用url
/ re_path
函数时不会生成捕获组,因此这种模式也是不正确的。
您的所有模式都是像使用path
函数一样设计的,因此您应该改为使用它:
from django.urls import path
urlpatterns = [
path('register/', views.registration, name="signup"),
path('login/', views.loginUser, name="login"),
path('logout/', views.logoutUser, name="logout"),
path('upload/', views.upload, name="upload"),
path('startlistening/', views.startlistening, name="startlistening"),
path('startlistening/<int:id>/', views.player, name="player")
]
在模板中的下一步,只需编写:
<a href="{% url 'player' i.song_id %}">
如果您想使用url
(您可能有一个较旧版本的Django (请升级),否则不建议使用),您可以重写模式如下:
# You might also want to add a "^" to the start of the patterns, or if these patterns are included somewhere add it to the start of the root pattern.
urlpatterns = [
url('register/$', views.registration, name="signup"),
url('login/$', views.loginUser, name="login"),
url('logout/$', views.logoutUser, name="logout"),
url('upload/$', views.upload, name="upload"),
url('startlistening/$', views.startlistening, name="startlistening"),
url('startlistening/(?P<id>\d+)/$', views.player, name="player")
]
发布于 2021-07-03 04:39:13
将url序列更改为
path('startlistening/<int:id>', views.player, name="player"),
path('startlistening/', views.startlistening, name="startlistening")
或者更明确的东西,比如:
path('player/<int:id>', views.player, name="player"),
path('startlistening/', views.startlistening, name="startlistening")
https://stackoverflow.com/questions/68236171
复制相似问题