【发布时间】:2018-12-10 03:39:44
【问题描述】:
我正在使用 Django 2.0.6(目前使用开发服务器)并且遇到了自动将斜杠附加到 URL 的问题。
我的目标是有一个如下的 URL 结构:
- /teams/ => 所有团队的索引视图
- /teams/create => 用于创建新团队的表单视图(注意缺少尾部斜杠)
- /teams/xyz/ => 带有 slug xyz 的团队的索引视图
- /teams/xyz/delete => 用于删除团队 xyz 的表单视图(需要确认等)
问题在于,在 Django 框架中的某个地方,尾部斜杠会自动附加到“创建”URL。因此,路由器会尝试使用 slug 'create' 为团队加载团队索引页面。显然,一种解决方法是停止使用 slug 并使用 ID,但这似乎是不必要的让步。
环顾四周,似乎将 APPEND_SLASH 设置为 False 应该告诉 CommonMiddleware 停止附加斜杠,但这没有帮助。
有没有一种方法可以轻松完成我的 URL 方案,如果没有,Django 的惯用方法是什么?
urls.py:
from django.urls import path
urlpatterns = [
path('create', views.create, name='create'),
path('<slug:team_slug>/', views.view, name='view'),
path('<slug:team_slug>/invite/', views.invite, name='invite')
]
settings.py:
APPEND_SLASH = False
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'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',
'debug_toolbar.middleware.DebugToolbarMiddleware',
]
使用以下内容正确生成链接:
<a class="btn btn-primary" href="{% url 'teams:create' %}">New Team</a>
翻译为:/teams/create
但是,当用户点击链接时,它似乎立即被重定向到/teams/create/
【问题讨论】:
-
您能否澄清一下,是正在生成一个包含额外斜杠的链接,还是您输入了无斜杠的 URL 并且您被重定向到带有斜杠的链接?如果是前者,您能否展示一个包含链接的模板示例?
-
@DanielRoseman :在我的模板代码中没有斜杠的情况下,该链接是正确生成的,但是当您点击该链接时,您会立即被重定向到带有斜杠的相同 URL。到达那里后,如果您从 URL 中删除斜杠并手动转到该页面,您将再次被重定向。我已经更新了问题。
-
奇怪的是,即使 APPEND_SLASH 为 True,CommonMiddleware 也只会在没有斜杠没有匹配的情况下重定向。所以它一定是别的东西。
标签: django