Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 没有与给定查询匹配的FlatPages_Python_Django - Fatal编程技术网

Python 没有与给定查询匹配的FlatPages

Python 没有与给定查询匹配的FlatPages,python,django,Python,Django,对于flatpages,我在settings.py中进行了必要的更改。然后在admin中创建一个flatpage/about/。但是当我运行http://localhost:8000/about/它呈现404,即没有与给定查询匹配的Flatpage。我的default.html位于project/templates/flatpages/default.html中。 url.py urlpatterns = patterns('', (r'^admin/', include(admin.s

对于
flatpages
,我在
settings.py中进行了必要的更改。然后在admin中创建一个flatpage/about/。但是当我运行
http://localhost:8000/about/
它呈现
404
,即
没有与给定查询匹配的Flatpage
。我的default.html位于
project/templates/flatpages/default.html中。

url.py

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    (r'^(?P<url>about/)$', 'django.contrib.flatpages.views.flatpage'),
)

看起来你可能想读一读

但现在,请尝试将其放在您的URL.py中:

# last entry in urls.py.  letting flatpages handle found pages or throw 404's
(r'', include('django.contrib.flatpages.urls')),
这只是确保我们有正确链接的网址。接下来,让我们看看如何创建FlapPage对象。通过/admin是最简单的,但您也可以使用shell。手工创建这些站点的诀窍是添加一个站点

./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异常

如果您在“站点”应用程序中更改了(添加了新的)站点,则必须在settings.py中使用与新添加的站点匹配的值来更改
站点ID

出于某种原因,只有使用站点ID=1才能正常工作。

这让我有一段时间不舒服,但这可能是您遇到的问题。当你在管理站点上定义一个页面时,如果你在站点名称后面没有包含一个/,它会给你一个404

即URL:/first page/vs/first page


第一个版本可以使用,而第二个版本可以使用404。这可能是你所坚持的?如果不是的话,那就把这篇文章发给其他人吧,他们可能会被困在困扰我的同一个问题上

>P>在所提供的大部分解决方案之后,在Django文档中没有指出的最重要的因素是SITEYID=1。

默认情况下,Django在站点的管理面板上提供“example.com”。在添加flatpages时,用户可能倾向于添加自己的站点,大多数教程都会要求您在settings.py上使用site_ID=1

“示例”没有告诉您的是,“example.com”站点默认为1。因此,您应该做的是将“example.com”站点编辑为127.0.0.1:8000,这样就可以了

记住还要加上 url.py

(r'',包括('django.contrib.flatpages.url')

设置.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'
)


)

这假设您已经在FlatPage中创建了一行。遵循2016年第15章发布的Django。我不确定我得到了它。显然,我们在站点中已经有一行了(很明显,这在迁移过程中发生在帘幕后面),但我们必须在FlatPage中创建一行,然后将我们唯一的站点对象添加到该FlatPage的站点字段中: (在壳牌)


将URL.py和settings.py的相关部分添加到问题中。我们大多数人都不是善于读心术的人;^)@aoondey,你得到答案了吗?我有同样的问题。在验证URL是否已连接后,添加了一些尝试。
# last entry in urls.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',
 from django.contrib.flatpages.models import FlatPage, Site
 fp=FlatPage.objects.get(pk=1)
 our_site=Site.objects.all()[0]
 fp.sites.add(our_site)
 fp.save()