Нет FlatPages соответствует данному запросу - PullRequest
4 голосов
/ 28 ноября 2010

Я схожу с ума по необходимым изменениям 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',)

Ответы [ 6 ]

5 голосов
/ 29 ноября 2010

Похоже, вы, возможно, захотите прочесть именованные группы немного.

Но сейчас попробуйте вместо этого поместить это в ваш urls.py:

# last entry in urls.py.  letting flatpages handle found pages or throw 404's
(r'', include('django.contrib.flatpages.urls')),

Это просто гарантирует, что URL-адреса правильно связаны.Далее давайте посмотрим, как мы создаем объекты 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.

2 голосов
/ 20 февраля 2013

После выполнения большинства предоставленных решений, наиболее важным фактором, который вы должны учитывать, который не указан в документации django, является SITE_ID = 1.

По умолчанию Django предоставляет на панели администратора для сайтов,"example.com".При добавлении плоских страниц можно добавить свой собственный сайт, и в большинстве уроков будет указано, что вы используете SITE_ID = 1 для settings.py.

Что не говорите вам, так это то, что сайт "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',

)

1 голос
/ 04 августа 2011

Если вы изменили (добавили новый) сайт в приложении сайтов, вы должны изменить SITE_ID в settings.py на значение, соответствующее вновь добавленному сайту.

0 голосов
/ 01 мая 2017

Предполагается, что вы уже создали одну строку в FlatPage.Следуйте Django Unleashed 2016 главе 15. Не уверен, что понял.Очевидно, у нас уже есть строка в Site (и, очевидно, это происходит за кулисами во время миграции), но мы должны создать ее в FlatPage, а затем добавить наш единственный объект Site в поле сайта этой FlatPage: (в оболочке)

 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()
0 голосов
/ 20 августа 2012

Это на какое-то время заставило меня подняться на стену, но, возможно, это то, на чем ты застрял.Когда вы определяете страницу на сайте администратора, если вы не включаете / после имени сайта, это даст вам 404.

т.е.URL: / first-page / vs / first-page

первая версия будет работать, а вторая - 404. Возможно, вы застряли?Если нет, просто опубликуйте это для других людей, которые могут застрять в той же проблеме, которая меня беспокоила.

0 голосов
/ 08 сентября 2011

По какой-то причине, только если вы используете site_id = 1, это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...