[英]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.