我有一个allauth
模板的自定义目录。 我需要一些自定义的URLPatterns
,也不需要一些默认视图。 我想从粘接整个Allauth
开始,然后更改以后需要的内容。
我的主应用config/urls.py
文件
from django.urls import include, path
urlpatterns = [
path("account/", include("users.urls")),
]
用户应用程序:
用户/urls.py
app_name = "users"
urlpatterns = [
path("login/", allauth_views.login, name="account_login"),
path("logout/", allauth_views.logout, name="account_logout"),
path("signup/", allauth_views.signup, name="account_signup"),
]
使用这种基本设置,如果我转到/account/login
,它将正确地路由到所需的视图,但它是在users
应用程序中用app_name=“users”
定义的,因此,我必须用reverse(users:account_login)
在其他视图中访问它。 问题是AlLauth
LoginView
具有此方法
def get_context_data(self, **kwargs):
ret = super(LoginView, self).get_context_data(**kwargs)
signup_url = passthrough_next_redirect_url(self.request,
reverse("account_signup"),
self.redirect_field_name)
redirect_field_value = get_request_param(self.request,
self.redirect_field_name)
site = get_current_site(self.request)
ret.update({"signup_url": signup_url,
"site": site,
"redirect_field_name": self.redirect_field_name,
"redirect_field_value": redirect_field_value})
return ret
它在reverse(“account_signup”)
上执行查找,但Django丢失并抛出Django.urls.exceptions.noReverseMatch
。
两种解决方案:
AlLauth
urlpatterns,它可以正常工作,但我希望保持该文件较小,并在Users
应用程序中定义AlLauth
URL.users/urls.py
中定义app_name
,它可以正常工作,但我希望它用于其他路由。 我认为添加app_name
是一种很好的做法。 我本来可以为Allauth
创建另一个没有应用程序名称的应用程序,但是我会在两个应用程序中包含用户的东西。这些都不能让我满意。
我想要的是:
我是否可以在没有命名空间的情况下包括
它们? 我尝试了path(“account/”,include(“users.urls”,namespace=none))
,但没有成功。
我没在想。。。 我可以在users/urls.py
中保留我的自定义users
URL,并在users
app中创建另一个URL文件,如users/allauth_urls.py
,这样就可以正常工作。
然后,用
path("account/", include("users.allauth_urls")),
一切都按计划进行。