0

我试图简单地为应用程序 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'),
4

2 回答 2

2

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

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

根据Django 的文档

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

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

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

于 2016-12-29T16:38:22.860 回答
0

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

如果您需要访问 url :

  • /数据存储/

  • /数据存储/无头/

您可以创建两个 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'),
]
于 2016-12-29T16:40:08.553 回答