簡體   English   中英

如何在 Django 中包含帶有 app_name 的 url,而不必使用帶有應用名稱的反向?

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

兩種解決方案:

  1. 如果我在我的主 urls 文件中設置這些allauth urlpatterns 它可以正常工作,但我想保持這個文件很小並在我的users應用程序中定義allauth urls。
  2. 如果我沒有在我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM