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

Django中Login/Signup URL自动补斜杠,求无斜杠配置方案

Django URL自动补加斜杠问题

问题现象

手动输入login、signup这类URL时,系统会自动在末尾添加斜杠;但contact等其他URL却能正常访问,不会触发自动补加。希望login无需添加斜杠即可直接访问,虽然把urls.py里的路径改成path('login/', views.login, name='login')能解决问题,但希望保持无斜杠的路径配置(即path('login', views.login, name='login'))实现需求。

相关代码

views.py

def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            auth.login(request, user)
            return redirect('/')
        else:
            messages.info(request, 'Invalid Credendials')
            return redirect('login')
    return render(request, 'login.html')

def contact(request):
    return render(request, 'contact.html')

原urls.py配置

path('login', views.login, name='login'),
path('contact', views.contact, name='contact'),

可解决但非期望的修改方案

path('login/', views.login, name='login')

解决方案

Django默认开启APPEND_SLASH配置(值为True),当请求的URL未匹配到路由,但添加斜杠后能匹配时,会自动重定向到带斜杠的URL。你的login路由明明配置了无斜杠路径却仍触发重定向,核心问题是登录失败时的重定向逻辑受APPEND_SLASH影响,生成了带斜杠的URL。以下是两种符合你需求的解决办法:

  1. 全局关闭自动补斜杠
    在项目settings.py中添加:

    APPEND_SLASH = False
    

    此设置会让所有URL都不再自动补加斜杠,反向解析生成的URL也会保持无斜杠格式,适合全站统一使用无斜杠URL的场景。

  2. 精确匹配单个无斜杠路由
    如果只想让login等特定URL不触发补斜杠重定向,同时保留其他URL的默认行为,可使用正则路由精确匹配无斜杠路径:
    修改urls.py:

    from django.urls import re_path
    
    re_path(r'^login$', views.login, name='login'),
    re_path(r'^contact$', views.contact, name='contact'),
    

    正则表达式^login$会严格匹配以login结尾的路径(不会匹配login/),Django就不会触发补斜杠的重定向。

另外,检查login.html中的表单提交地址,确保使用{% url 'login' %}生成无斜杠的路径,避免表单提交到带斜杠的URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:12:19