Django 身份验证 URL 的默认名称空间是什么?
What are the default namespaces for django authentication URLs?
我将我的应用 urls.py
更改为具有命名空间 app_name = 'somename'
。然后做了这些,
- 已将
reverse('url-name')
更改为 reverse('somename:url-name')
。
- 已将
{% url 'url-name' %}
更改为 {% url 'somename:url-name' %}
。
- 将
{% if request.resolver_match.url_name == "url-name" %}
更改为 {% if request.resolver_match.url_name == "somename:url-name" %}
。
对于 accounts
应用程序,我只有 login
和 signup
两个自定义视图。所以像 reverse('accounts:login')
这样的 reverse
正在工作,但是 reverse('accounts:password_reset')
(默认 django auth 的一部分)不工作。
这是我试过的,
- 已将
reverse('accounts:password_reset')
替换为 reverse('auth:password_reset')
。
- 已将
reverse('accounts:password_reset')
替换为 reverse('password_reset')
。
解决方案 1 无效。解决方案 2 正在运行。我还尝试将我项目的 urls.py
中的 path('accounts/', include('django.contrib.auth.urls'))
更改为 path('accounts/', include('django.contrib.auth.urls', namespace='auth'))
和 path('accounts/', include('django.contrib.auth.urls, namespace='accounts'))
。都没有用。
project/urls.py
urlpatterns = [
path('', include('core.urls')),
path('admin/', admin.site.urls),
path('accounts/', include('accounts.urls')),
path('accounts/', include('django.contrib.auth.urls')),
path('books/', include('library.urls'))
]
accounts/urls.py
app_name = 'accounts'
urlpatterns = [
path('signup/', views.CustomSignup.as_view(), name='signup'),
path('login/', views.CustomLogin.as_view(), name='login'),
]
为什么使用 accounts
和 auth
命名空间 password_reset
会失败?是否有包含可以使用的默认命名空间的文档页面?
据我通过阅读源代码得知它们根本没有命名空间,您通常只能像现在这样通过名称引用它们。
如果您想让它们命名空间,您可以将它们包含在您的 accounts
' urlpatterns
中,而不是您的项目中,然后手动添加命名空间:
app_name = 'accounts'
urlpatterns = [
path('signup/', views.CustomSignup.as_view(), name='signup'),
path('login/', views.CustomLogin.as_view(), name='login'),
path('', include('django.contrib.auth.urls', namespace='accounts')),
]
我将我的应用 urls.py
更改为具有命名空间 app_name = 'somename'
。然后做了这些,
- 已将
reverse('url-name')
更改为reverse('somename:url-name')
。 - 已将
{% url 'url-name' %}
更改为{% url 'somename:url-name' %}
。 - 将
{% if request.resolver_match.url_name == "url-name" %}
更改为{% if request.resolver_match.url_name == "somename:url-name" %}
。
对于 accounts
应用程序,我只有 login
和 signup
两个自定义视图。所以像 reverse('accounts:login')
这样的 reverse
正在工作,但是 reverse('accounts:password_reset')
(默认 django auth 的一部分)不工作。
这是我试过的,
- 已将
reverse('accounts:password_reset')
替换为reverse('auth:password_reset')
。 - 已将
reverse('accounts:password_reset')
替换为reverse('password_reset')
。
解决方案 1 无效。解决方案 2 正在运行。我还尝试将我项目的 urls.py
中的 path('accounts/', include('django.contrib.auth.urls'))
更改为 path('accounts/', include('django.contrib.auth.urls', namespace='auth'))
和 path('accounts/', include('django.contrib.auth.urls, namespace='accounts'))
。都没有用。
project/urls.py
urlpatterns = [
path('', include('core.urls')),
path('admin/', admin.site.urls),
path('accounts/', include('accounts.urls')),
path('accounts/', include('django.contrib.auth.urls')),
path('books/', include('library.urls'))
]
accounts/urls.py
app_name = 'accounts'
urlpatterns = [
path('signup/', views.CustomSignup.as_view(), name='signup'),
path('login/', views.CustomLogin.as_view(), name='login'),
]
为什么使用 accounts
和 auth
命名空间 password_reset
会失败?是否有包含可以使用的默认命名空间的文档页面?
据我通过阅读源代码得知它们根本没有命名空间,您通常只能像现在这样通过名称引用它们。
如果您想让它们命名空间,您可以将它们包含在您的 accounts
' urlpatterns
中,而不是您的项目中,然后手动添加命名空间:
app_name = 'accounts'
urlpatterns = [
path('signup/', views.CustomSignup.as_view(), name='signup'),
path('login/', views.CustomLogin.as_view(), name='login'),
path('', include('django.contrib.auth.urls', namespace='accounts')),
]