django 1.10 url调度员无法正常工作

时间:2016-12-29 16:28:32

标签: python django django-urls django-1.10

我试图简单地为应用网址提供/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'),

2 个答案:

答案 0 :(得分:2)

您必须从应用/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

  

每当Django遇到include()时,它就会切断任何部分   URL匹配到该点并将剩余的字符串发送到   包含URLconf以供进一步处理。

因此,项目设置中的网址格式会使用datastore/前缀。您应该可以通过尝试/datastore/datastore/headless/来检查是否属于这种情况(这应该适用于您当前的配置)。

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

答案 1 :(得分:0)

它可能是你网址上的正则表达式。

如果您需要访问网址:

  • /数据存储/

  • /数据存储/无头/

你可以创建两个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'),
]