为什么 Django 要向所有 {% url %} 模板标签查找添加"/accounts/logout/"?



我有一个非常简单的POC模板,在Django中,包含这个;

<form action="{% url 'formtest' %}" method="post">
{% csrf_token %}
{% url 'formtest' %}
<input type="submit" value="Vote">
</form>

当我呈现它时,URL 模板标签使我的目标成为这个;

/accounts/logout/formtest

这是不对的,它应该只是"/formtest"。而且我不知道为什么它会在/accounts/logout 位之前添加前缀。用户未登录。我的 url.py 看起来像这样;

from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('create_user/<str:username>', views.create_user, name='create_user'),
path('monitor', views.monitor, name='monitor'),
path('upload', views.upload_file, name='upload'),
path('formtest', views.formtest, name='formtest'),
]

我的 Django 版本是 2.2.5,我尝试将示例简化到几乎最低限度。但是我找不到为什么该模板标签要添加该位。我几乎可以肯定自己做了一些奇怪或奇怪的事情,但我没有找到什么和在哪里。

编辑:项目 urls.py

from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('', include('Gallery.urls')),
path('gallery/', include('Gallery.urls')),
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
path('accounts/profile/', include('Gallery.urls')),
path('accounts/logout/', include('Gallery.urls')),
]

在你的项目 urls.py 中,你已经将所有基本网址指向 Gallery.urls,由于 accounts/logout 是最后一个要解决的问题,所以你会得到 formtest 的"/accounts/logout/formtest"。

必须只有一个指向 Gallery.urls 的基本 url,即

path('gallery/', include('Gallery.urls')),

这会将 formtest 解析为/gallery/formtest"。删除所有其他包含("Gallery.urls"((行并将其指向相应的 urls.py 文件。

最新更新