我对settings.py
flatpages
的必要更改感到愤怒。然后在管理员中我创建一个平面/关于/。但是当我运行http://localhost:8000/about/
时,它会404
呈现No FlatPages matches the given query
。我的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',)
答案 0 :(得分:5)
看起来您可能想稍微阅读named groups。
但是现在尝试将它放在你的urls.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异常。
答案 1 :(得分:2)
在遵循提供的大多数解决方案后,您应该考虑的最重要的因素是django文档中没有指出的是SITE_ID = 1。
默认情况下,Django在网站的管理面板上提供“example.com”。添加flatpages时,可能会添加自己的网站,大多数教程都会指示您在settings.py上使用SITE_ID = 1。
不告诉你的是“example.com”网站默认为1.所以你应该做的就是将“example.com”网站编辑到127.0.0.1:8000然后就可以了。
记得还要添加 url.py
# last entry in urls.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',
)
答案 2 :(得分:1)
如果您在网站应用程序中更改了(添加新网站),则必须在settings.py中更改SITE_ID
,其值与新添加的网站相匹配。
答案 3 :(得分:0)
出于某种原因,只有当你使用site_id = 1时它才会起作用。
答案 4 :(得分:0)
这让我在墙上开了一段时间,但这可能就是你被卡住了。当你在管理网站上定义一个页面时,如果你没有在网站名称后面加/,它会给你一个404。
即。网址:/ first-page / vs / first-page
第一个版本可以使用,而第二个版本将是404.这可能是你坚持的版本?如果没有,只需将其发布给其他人,这些人可能会遇到困扰我的同一问题。
答案 5 :(得分:0)
这假设您已经在FlatPage中创建了一行。关注Django Unleashed 2016第15章。不确定我得到了它。显然我们已经在Site中有一行(显然这是在迁移过程中幕后发生的),但我们必须在FlatPage中创建一个,然后将我们唯一的Site对象添加到FlatPage的站点字段: (在shell中)
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()