Django项目点击按钮出现页面URL找不到错误,请求排查
Django 404页面找不到问题排查
问题现象
点击网站按钮时触发404错误,页面提示找不到指定URL:
跟着YouTube教程开发项目,怀疑URL配置存在问题,但无法定位具体错误点。
相关代码
urls.py
from django.urls import path from . import views urlpatterns = [ path('login/', views.loginPage, name="login"), path('logout/', views.logoutUser, name="logout"), path('register/', views.registerPage, name="register"), path('', views.home, name='home'), path('room/<str:pk>/', views.room, name="room"), path('profile/<str:pk>',views.userProfile,name="user-profile"), path('create-room/', views.createRoom, name="create-room"), path('update-room/<str:pk>/', views.updateRoom, name="update-room"), path('delete-room/<str:pk>/', views.deleteRoom, name="delete-room"), path('delete-message/<str:pk>/', views.deleteMessage, name="delete-message"), ]
views.py
from django.shortcuts import render, redirect from django.db.models import Q from django.http import HttpResponse from django.contrib.auth.decorators import login_required from django.contrib import messages from django.contrib.auth.models import User from django.contrib.auth import authenticate,login,logout from .models import Room, Topic, Message from django.contrib.auth.forms import UserCreationForm from .forms import RoomForm def loginPage(request): page = 'login' if request.user.is_authenticated: return redirect('home') if request.method == 'POST': username = request.POST.get('username').lower() password = request.POST.get('password') try: user = User.objects.get(username=username) except: messages.error(request,'User does not exist') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return redirect('home') else: messages.error(request,'Username OR password does not exit') context = {'page': page} return render(request, 'base/login_register.html', context) def logoutUser(request): logout(request) return redirect('home') def registerPage(request): form = UserCreationForm() if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): user = form.save(commit=False) user.username = user.username.lower() user.save() login(request, user) return redirect('home') else: messages.error(request,'An error occurred during registration') return render(request, 'base/login_register.html',{'form':form}) def home(request): q=request.GET.get('q') if request.GET.get('q')!= None else '' rooms = Room.objects.filter( Q(topic__name__icontains=q) | Q(name__icontains=q) | Q(description__icontains=q) ) topics = Topic.objects.all() room_count = rooms.count() room_messages = Message.objects.all() context = {'rooms': rooms, 'topics' : topics, 'room_count' : room_count,'room_messages': room_messages} return render(request, 'base/home.html', context) def room(request,pk): room = Room.objects.get(id=pk) room_messages = room.message_set.all() participants = room.participants.all() if request.method == 'POST': message = Message.objects.create( user = request.user, room=room, body=request.POST.get('body') ) room.participants.add(request.user) return redirect('room',pk=room.id) context = {'room': room,'room_messages':room_messages, 'participants': participants} return render(request, 'base/room.html', context) def userProfile(request, pk): user = User.objects.get(id=pk) context={'user':user} return render(request,'base/room.html',context) @login_required(login_url='login') def createRoom(requset): form = RoomForm if requset.method == 'POST': form = RoomForm(requset.POST) if form.is_valid(): form.save() return redirect('home') context = {'form': form} return render(requset, 'base/room_form.html',context) @login_required(login_url='login') def updateRoom(request,pk): room = Room.objects.get(id=pk) form = RoomForm(instance=room) if request.user != room.host: return HttpResponse('Your are not allowed here!!!') if request.method == 'POST': form = RoomForm(request.POST, instance=room) if form.is_valid(): form.save() return redirect('home') context = {'form': form} return render(request,'base/room_form.html', context) @login_required(login_url='login') def deleteRoom(request, pk): room = Room.objects.get(id=pk) if request.user != room.host: return HttpResponse('Your are not allowed here!!!') if request.method == 'POST': room.delete() return redirect('home') return render(request,'base/delete.html',{'obj': room}) @login_required(login_url='login') def deleteMessage(request, pk): message = Room.objects.get(id=pk) if request.user != message.host: return HttpResponse('Your are not allowed here!!!') if request.method == 'POST': message.delete() return redirect('home') return render(request,'base/delete.html',{'obj': message})
问题排查方向
- 视图参数拼写错误:
createRoom视图的参数写成了requset(少一个字母e),导致请求无法正确匹配视图,触发404,需改为request。 - 数据模型查询错误:
deleteMessage视图中错误用Room.objects.get(id=pk)获取消息,应改为Message.objects.get(id=pk);同时确认Message模型是否存在host字段,若不存在会引发异常导致页面异常。 - URL路径一致性:检查模板中按钮跳转的URL是否与
urls.py配置匹配,比如profile/<str:pk>末尾无斜杠,若模板用硬编码路径需注意是否多写斜杠;模板中应尽量用{% url 'url-name' 参数 %}的方式生成路径,避免硬编码错误。 - 模板跳转逻辑:
userProfile视图返回的是base/room.html模板,检查该模板内是否存在错误的URL跳转链接。 - 根URL配置:确认项目根
urls.py是否正确包含了当前app的URL配置。
若上述排查未解决问题,可以提供模板文件或错误页面显示的具体URL路径,进一步定位问题。
内容的提问来源于stack exchange,提问作者Игорь.К FK
相关产品推荐
相关产品推荐

