没有FlatPages匹配给定查询

4 投票
6 回答
3325 浏览
提问于 2025-04-16 07:44

我在 settings.py 文件里做了必要的修改,以便使用 flatpages。然后在后台创建了一个平面页面 /about/。可是当我访问 http://localhost:8000/about/ 时,出现了 404 错误,提示 没有找到匹配的平面页面。我的默认模板文件 default.htmlproject/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 个回答

1

如果你在网站应用中添加了一个新的网站,你需要在settings.py文件中把的值改成新添加的网站对应的值。

2

在尝试了大部分提供的解决方案后,有一个非常重要的因素你需要考虑,但在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',

)

5

看起来你可能需要先了解一下命名组的内容。

不过现在你可以试着在你的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的错误。

撰写回答