繁体   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