【问题标题】:Django reverse mappingDjango 反向映射
【发布时间】:2013-07-08 16:24:10
【问题描述】:

我有以下文件

目录/urls.py(项目)

url(r'^$', include('dirapp.urls', namespace='dirapp')),

dirapp/urls.py(应用程序)

url(r'^detail/(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail')

但是当我去shell时我不能做reverse,所有这些都不成功

reverse('dirapp')
reverse('dirapp:detail', kwargs={'pk':1})

【问题讨论】:

  • 您需要删除显示的第一个网址中的$

标签: django


【解决方案1】:

删除url(r'^$', include('dirapp.urls', namespace='dirapp'))中的$

这表示 URL 模式的结束。

应该是

url(r'^', include('dirapp.urls', namespace='dirapp'))

阅读更多关于including URL patterns here

【讨论】:

  • 不幸的是,无论 $ 是否存在,我都有相同的结果:(
  • reverse('dirapp') 无效。试试reverse('detail', args=[1])。更多herekwargs 也应该可以工作
  • 我得到了它的工作,不幸的是我做了一些改变,但找不到有帮助的。但无论如何我在代码中发现了一些错误......
  • 这里的主要内容是您需要重新启动shell才能使路由更改生效。我不知道:(
【解决方案2】:

这是错误的

views.DetailView.as_view()

必须有从 DetailView 扩展的正确视图,例如

views.PersonDetail.as_view()

第二件事,不幸的是,您需要重新启动 shell 才能使更改生效!

另外,如果有命名空间,所有的 url 都需要使用这个来解析

reverse('namespace:name'), e.g. reverse('dirapp:index')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2020-10-03
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    相关资源
    最近更新 更多