【问题标题】:How to avoid hardcoded url in Django view in that case?在这种情况下,如何避免在 Django 视图中硬编码 url?
【发布时间】:2014-09-02 01:50:36
【问题描述】:

我知道我们通常会反转(someview)以避免在视图中硬编码 url。

但就我而言:

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

def signin_owner(request):
    # stuff...

这不起作用,这会在任何 URL 上引发 ImproperlyConfigured 错误(消息是:包含的 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'),

谢谢!

【问题讨论】:

  • 你的项目名称是hellodjango ?
  • 哦,我以为你复制了示例 django 项目并忘记更改名称。你能粘贴你的urls.py 吗?你的view_2 在哪里定义
  • 可能是这样,但我有疑问,因为我在这个项目上工作了 6 个月,以前从未出现过这样的错误。我更新了代码。谢谢。
  • 您是否尝试在 view_1 之前定义 signin_owner?
  • 是的,我也在考虑这个问题。但同样的结果:(

标签: python django


【解决方案1】:

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

现在您的视图将是这样的:

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

【讨论】:

  • 优秀!!!就是这样,谢谢。我不知道装饰器内部的 url 中可能需要它。
猜你喜欢
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
  • 2013-07-17
相关资源
最近更新 更多