[英]How to include urls with app_name without having to use reverse with app name in Django?
我有一个用于allauth
模板的自定义目录。 我需要一些自定义urlpatterns
以及我不想要一些默认视图。 我想从粘合整个allauth
开始,然后更改我以后需要的东西。
我的主应用config/urls.py
文件
from django.urls import include, path
urlpatterns = [
path("account/", include("users.urls")),
]
用户应用:
users/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"),
]
有了这个基本设置,如果我 go 到/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
urls。users/urls.py
中定义app_name
它可以正常工作,但我希望它用于其他路线。 我认为添加app_name
是一个好习惯。 我可以在没有应用名称的情况下为allauth
创建另一个应用,但是我会在两个应用中包含用户的东西。这些都不能让我满意。
我想要的是:
我可以在没有命名空间的情况下以某种方式include
它们吗? 我尝试path("account/", include("users.urls", namespace=None))
没有任何运气。
我没想到......我可以将我的自定义users
url 保存在users/urls.py
中并使用应用程序名称,并在users
应用程序中创建另一个 urls 文件,如users/allauth_urls.py
并且一切正常。
然后,与
path("account/", include("users.allauth_urls")),
事情按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.