如何在这种情况下避免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'),
谢谢!
答
在加载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
您的项目名称是'hellodjango'? – levi 2014-09-02 02:03:39
是的。为什么? :) – 2014-09-02 02:07:58
哦,我想你复制了示例django项目,并忘记更改名称。你可以粘贴你的'urls.py'吗?并在哪里定义你的'view_2' – levi 2014-09-02 02:09:49