You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中/user_signup等URL出现404错误,请求排查

Django应用URL 404及模板不存在问题排查

问题描述

开发了一款支持用户登录、登出、航班搜索、航班预订及查看预订的Web应用,目前/login、/logout、/admin可正常访问,但/user_signup等URL出现404错误。调整模板文件夹位置后又出现「Template doesn't exist」错误。

相关代码

app的urls.py

from django.urls import path
from . import views

urlpatterns = [
  path('', views.home, name='home'),
  path('search_flights/', views.search_flights, name='search_flights'),
  path('book_flight/<int:flight_id>/', views.book_flight, name='book_flight'),
  path('my_bookings/', views.my_bookings, name='my_bookings'),
  path('login/', views.user_signup, name='login'),
  path('signup/', views.user_signup, name='signup'),
]

app的views.py

from django.shortcuts import render, redirect
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
from .models import Flight, Booking
from django.contrib.auth.forms import UserCreationForm
from .forms import SignUpForm, SignInForm, EditProfileForm


def home(request):
   flights = Flight.objects.all()
   return render(request, 'home.html', {'flights': flights})

@login_required
def search_flights(request):
   if request.method == 'POST':
       date = request.POST.get('date')
       time = request.POST.get('time')
       flights = Flight.objects.filter(date=date, time=time)
       return render(request, 'search_flights.html', {'flights': flights})
   return render(request, 'search_flights.html')
       

@login_required
def book_flight(request, flight_id):
   flight = Flight.objects.get(id=flight_id)
   if request.method == 'POST':
       # Check if seats are available
       if flight.seats_available() > 0:
           # Book the ticket
           booking = Booking.objects.create(flight=flight, user=request.user)
           return redirect('my_bookings')
       else:
           # Show error message
           return render(request, 'book_flight.html', {'flight': flight, 'error': 'No seats available.'})
   return render(request, 'book_flight.html', {'flight': flight})

@login_required
def my_bookings(request):
   bookings = Booking.objects.filter(user=request.user)
   return render(request, 'my_bookings.html', {'bookings': bookings})

def user_login(request):
   if request.method == 'POST':
       form = AuthenticationForm(request, data=request.POST)
       if form.is_valid():
           username = form.cleaned_data.get('username')
           password = form.cleaned_data.get('password')
           user = authenticate(username=username, password=password)
           if user is not None:
               login(request, user)
               return redirect('home')
   else:
       form = AuthenticationForm()
   return render(request, 'login.html', {'form': form})

def user_signup(request):
   if request.method == 'POST':
       form = UserCreationForm(request.POST)
       if form.is_valid():
           user = form.save()
           login(request, user)
           return redirect('home')
   else:
       form = UserCreationForm()
   return render(request, 'signup.html', {'form': form})

项目主urls.py

from django.urls import path, include
from . import views
from django.contrib import admin
from django.views.generic.base import TemplateView

urlpatterns = [
    path(r'admin/',admin.site.urls),
    path('', views.home, name='home'),
    path('app/', include('app.urls')),
    path('',include('django.contrib.auth.urls')),
    path('',TemplateView.as_view(template_name='home.html'),name='home')
]

目录结构

flight
└─ flight_booking
   ├─ app
   │  ├─ admin.py
   │  ├─ apps.py
   │  ├─ migrations
   │  │  ├─ 0001_initial.py
   │  │  ├─ __init__.py
   │  │  └─ __pycache__
   │  │     ├─ 0001_initial.cpython-39.pyc
   │  │     └─ __init__.cpython-39.pyc
   │  ├─ models.py
   │  ├─ templates
   │  │  └─ app
   │  │     ├─ book_flight.html
   │  │     └─ search_fights.html
   │  ├─ tests.py
   │  ├─ urls.py
   │  ├─ views.py
   │  ├─ __init__.py
   │  └─ __pycache__
   │     ├─ admin.cpython-39.pyc
   │     ├─ apps.cpython-39.pyc
   │     ├─ forms.cpython-39.pyc
   │     ├─ models.cpython-39.pyc
   │     ├─ urls.cpython-39.pyc
   │     ├─ views.cpython-39.pyc
   │     └─ __init__.cpython-39.pyc
   ├─ db.sqlite3
   ├─ flight_booking
   │  ├─ asgi.py
   │  ├─ settings.py
   │  ├─ urls.py
   │  ├─ views.py
   │  ├─ wsgi.py
   │  ├─ __init__.py
   │  └─ __pycache__
   │     ├─ settings.cpython-39.pyc
   │     ├─ urls.cpython-39.pyc
   │     ├─ views.cpython-39.pyc
   │     ├─ wsgi.cpython-39.pyc
   │     └─ __init__.cpython-39.pyc
   ├─ manage.py
   └─ templates
      ├─ base.html
      ├─ home.html
      └─ registration
         ├─ login.html
         └─ signup.html

问题排查与修复方案

1. URL配置错误修复

  • 路由指向错误:app的urls.py中,path('login/', views.user_signup, name='login'),错误地将login路由指向注册视图user_signup,应改为path('login/', views.user_login, name='login'),。
  • 缺少user_signup路由:当前urls中未定义/user_signup,需添加:path('user_signup/', views.user_signup, name='user_signup'),。
  • 主路由冲突:项目主urls.py存在多个空路径path('', ...),导致路由匹配优先级混乱。建议调整主urls.py,移除重复的home路由,示例:
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('app/', include('app.urls')),
        path('', include('django.contrib.auth.urls')),
        path('', TemplateView.as_view(template_name='home.html'), name='home')
    ]
    

2. 模板路径问题修复

  • 模板文件名拼写错误:目录中search_fights.html应为search_flights.html。
  • 模板引用路径错误:
    • app内模板(如search_flights.html、book_flight.html)位于app/templates/app/下,views中需用相对路径引用,例如return render(request, 'app/search_flights.html', {'flights': flights})。
    • login.html和signup.html位于项目根templates/registration/下,views中需引用为return render(request, 'registration/login.html', {'form': form})和return render(request, 'registration/signup.html', {'form': form})。
  • 检查settings.py配置:确保TEMPLATES中的APP_DIRS设为True,让Django自动识别app内的templates目录:
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [BASE_DIR / 'templates'],
            'APP_DIRS': True,
            # 其他配置项
        },
    ]
    

内容的提问来源于stack exchange,提问作者Aishani Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:57:07