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

Django生产环境URL无法自动追加尾斜杠问题求助

Django 生产环境下无尾斜杠URL返回404而非重定向问题

我使用Django==4.2.3开发网站,本地环境访问http://127.0.0.1:8000/calculators时,会自动重定向到带尾斜杠的http://127.0.0.1:8000/calculators/,这是正常的。但在生产服务器中,访问https://example.com/calculators直接返回404错误,没有自动重定向到https://example.com/calculators/。

我没有手动设置APPEND_SLASH,因为它的默认值已经是True。

中间件配置

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    "whitenoise.middleware.WhiteNoiseMiddleware",
    "django_browser_reload.middleware.BrowserReloadMiddleware",
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

URL配置

calculators/urls.py

from django.urls import path
from .views import *

urlpatterns = [
    path('', CalculatorsView.as_view(), name='calculators'),
    path('stripe-fee/', StripeFeeCalculator.as_view(), name='stripe_fee_calculator'),
    path('fiverr-fee/', FiverrFeeCalculator.as_view(), name='fiverr_fee_calculator'),
]

project/urls.py

urlpatterns = [
    ...
    path('calculators/', include('calculators.urls')),
    ...
]

已解决方案

虽然不清楚两者的关联,但修改自定义的404和500视图函数后问题得到解决:

修改前的错误代码

def page_not_found(request, exception):
    return render(request, 'pages/404.html', {})

def server_error(request):
    return render(request, 'pages/500.html', {})

修改后的正确代码(添加状态码)

def page_not_found(request, exception):
    return render(request, 'pages/404.html', {}, status=404)

def server_error(request):
    return render(request, 'pages/500.html', {}, status=500)

注:未手动设置APPEND_SLASH=True,仅通过上述修改解决了问题!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:23:22