没有FlatPages匹配给定查询
我在 settings.py
文件里做了必要的修改,以便使用 flatpages
。然后在后台创建了一个平面页面 /about/。可是当我访问 http://localhost:8000/about/
时,出现了 404
错误,提示 没有找到匹配的平面页面
。我的默认模板文件 default.html
在 project/templates/flatpages/default.html
这个位置。
urls.py
urlpatterns = patterns('',
(r'^admin/', include(admin.site.urls)),
(r'^(?P<url>about/)$', 'django.contrib.flatpages.views.flatpage'),
)
settings.py
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
#'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'django.contrib.flatpages',)
6 个回答
如果你在网站应用中添加了一个新的网站,你需要在settings.py文件中把
在尝试了大部分提供的解决方案后,有一个非常重要的因素你需要考虑,但在Django的文档中并没有提到,那就是SITE_ID = 1。
默认情况下,Django在管理面板中为网站提供的是“example.com”。当你添加静态页面时,可能会想要添加自己的网站,而大多数教程会告诉你在settings.py中使用SITE_ID = 1。
但他们没有告诉你的是,“example.com”这个网站默认就是1。所以你需要做的就是把“example.com”这个网站的地址改成127.0.0.1:8000,这样就可以了。
记得还要在
# last entry in urls.py.
url.py中添加
(r'', include('django.contrib.flatpages.urls')),
在settings.py中
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.flatpages',
)
看起来你可能需要先了解一下命名组的内容。
不过现在你可以试着在你的urls.py文件里放入以下内容:
# last entry in urls.py. letting flatpages handle found pages or throw 404's
(r'', include('django.contrib.flatpages.urls')),
这样做是为了确保我们的网址链接设置正确。接下来,我们来看看如何创建FlapPage对象。通过/admin这个路径是最简单的,但你也可以使用命令行工具。手动创建这些对象时,记得要添加一个站点。
./manage.py shell
> from django.contrib.flatpages.models import FlatPage
> fp = FlatPage.objects.create(url="/test/", content="This is a test...")
> fp.sites.add(1) # in dev you are probably using site.id == 1.
你也可以尝试使用你现有的FlatPage对象。只要确保它和一个站点关联就可以了。
> about = FlatPage.objects.get(url="/about/")
> about.sites.all()
[]
> # Empty list of sites. This will give you a 'No FlatPage matches' 404.
> about.sites.add(1)
现在启动服务器,看看效果。如果你还没有创建flatpages/default.html这个模板,你会遇到一个TemplateDoesNotExist的错误。