django 1.10 url 调度程序不工作

django 1.10 url dispatcher not working

我正在尝试简单地为应用 url 提供 /headless/ 选项,以使其显示不同的模板。

我的 project/urls.py 有:

urlpatterns = [
    url(r'^datastore/', include('datastore.urls')),
]

我的 app/urls.py 有:

app_name = 'datastore'
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^datastore/(?P<headless>"headless"{1})/$', views.index,name='index'),
]

我收到上述 404 错误。

我也试过:

url(r'^datastore/(?P<headless>"headless"?)/$',
url(r'^datastore/(?P<headless>\w{1})/$', views.index, name='index'),
url(r'^datastore/(?P<headless>\w+)/$', views.index, name='index'),

您必须从应用中删除前缀 /datastore/ urlpattern:

app_name = 'datastore'
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(?P<headless>"headless"{1})/$', views.index,name='index'),
]

根据Django's documentation

Whenever Django encounters include(), it chops off whatever part of the URL matched up to that point and sends the remaining string to the included URLconf for further processing.

因此,项目设置中的 url 模式使用了 datastore/ 前缀。您应该能够通过尝试 /datastore/datastore/headless/(这应该适用于您当前的配置)来检查是否如此。

但是请注意,正则表达式的组合匹配 /datastore/headless//datastore//(在所有变体中都相同)。这可能不是你想要的。 Wilfried 的回答(这里没有解决真正的问题)向您展示了如何更好地完成我认为您打算做的事情。

这可能是您 url 上的正则表达式。

如果您需要访问 url:

  • /数据存储/

  • /datastore/headless/

您可以创建两个 url,指向同一个视图。

urlpatterns = [
   url(r'^$', views.index, name='index'),
   url(r'^datastore/$', views.index, name='index'),
   url(r'^datastore/(?P<headless>(headless))/$', views.index, name='index'),
]

如果你愿意,没有必要使用参数。如果你只有无头之类的可能性。

urlpatterns = [
   url(r'^$', views.index, name='index'),
   url(r'^datastore/$', views.index, name='index'),
   url(r'^datastore/headless/$', views.index, name='index'),
]