如何在这种情况下避免Django视图中的硬编码url?

问题描述:

我知道我们通常会反转(someview)以避免视图中的硬编码网址。如何在这种情况下避免Django视图中的硬编码url?

但在我的情况:

@user_passes_test(is_logged_owner, login_url=reverse(signin_owner)) 
def view_1(request): 
    # stuff... 

def signin_owner(request): 
    # stuff... 

这是不行的,这将引发ImproperlyConfigured错误在任何URL(消息是:所包含的URLconf hellodjango.urls没有在任何模式)。

我不知道发生了什么,因为意见似乎在urls.py中很好定义(并且我在6个月内从未有过这样的错误)。

根urls.py:

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^', include('myapp.urls')), 
) 

MYAPP urls.py(一部分):

url(r'^signin_owner$', views.signin_owner, name='signin_owner'), 

谢谢!

+0

您的项目名称是'hellodjango'? – levi 2014-09-02 02:03:39

+0

是的。为什么? :) – 2014-09-02 02:07:58

+0

哦,我想你复制了示例django项目,并忘记更改名称。你可以粘贴你的'urls.py'吗?并在哪里定义你的'view_2' – levi 2014-09-02 02:09:49

在加载URLconf之前,您正在使用URL反转,因为其中reverse不起作用。解决方案是使用reverse_lazy代替。

现在你的看法会是这样的:

@user_passes_test(is_logged_owner, login_url=reverse_lazy('signin_owner',)) 
def view_1(request): 
    # stuff... 
+0

优秀!!!就是这样,谢谢。我不知道它可能需要在装饰器里面的网址。 – 2014-09-02 10:00:14