Satchmo и плоские страницы Джанго выпускают - PullRequest
0 голосов
/ 18 декабря 2009

У меня проблема с настройкой Flatpages в Satchmo. Я использовал их раньше, в чистом приложении django, но теперь оно просто не работает, возвращая ошибку 301 http при попытке зайти на сайт, настроенный для плоских страниц.

Что я сделал для его настройки:

  • добавило промежуточное программное обеспечение "django.contrib.flatpages.middleware.FlatpageFallbackMiddleware" в MIDDLEWARE_CLASSES, как последнее в списке,
  • настроенные примеры страниц в модуле администратора.

Просто то, что документы говорят о конфигурации плоских страниц.

Я чувствую себя беспомощным. Не знаю, как я мог отладить эту проблему. Есть мысли по этому поводу?

И, конечно, помощь приветствуется.

Благодаря предложению Питера мне удалось сузить проблему до моего файла urls.py для магазина satchmo.

У urlpatterns есть только одна запись:

(r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}),

Эта версия не работает и, кроме того, мешает работе с плоскими страницами. Но отключение плоских страниц в MIDDLEWARE_CLASSES и добавление их в urls.py, как показано ниже, работает:

(r'^(?P<url>.*)$', 'django.contrib.flatpages.views.flatpage'),
(r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}),

Однако следующая проблема связана с перенаправлением с / на /shop/. С вышеупомянутой конфигурацией это приводит к бесконечному циклу.

Возможно, вы знаете причину такого поведения (переадресация перезаписываемой плоской страницы) и, возможно, вы могли бы предложить какое-то рабочее решение этой проблемы или что следует делать с запросами к /.

1 Ответ

1 голос
/ 19 декабря 2009

Возвращает 301? Это страница, перемещенная навсегда (HttpResponsePermanentRedirect), и в каталоге flatpages нет ссылок на нее, поэтому я не думаю, что она идет оттуда. На самом деле во всех стандартных выпусках 1.1.1 имеется всего около 5 ссылок на HttpResponsePermanentRedirect.

Возможные подходы:

  1. Закомментируйте промежуточное ПО FlatPages и посмотрите, изменится ли ошибка (держу пари, она не изменится).
  2. Попробуйте изменить порядок ваших классов MIDDLEWARE и посмотрите, изменится ли ситуация.

При представлении такой проблемы лучше указать очень конкретный, показывая точный код из соответствующих частей settings.py (или чего-либо еще) и предоставляя другие вещи, такие как точные URL и urls.py шаблоны, которые вы пытаетесь сопоставить.

Обновление:

Хорошо, некоторые случайные мысли:

  1. Шаблон (r'^(?P<url>.*)$', 'django.contrib.flatpages.views.flatpage'), будет соответствовать чему угодно. Никаких шаблонов после этого никогда не будет видно.

  2. flatpages не работает при непосредственном вызове, он делает свою магию в промежуточном программном обеспечении. Он ищет 404 ответа (страница не найдена), а затем проверяет, существует ли этот путь в его таблице. Если это так, он вызывает представление, которое отображает страницу и т. Д. И т. Д. Если он не находит соответствия , он позволяет 404 продолжать обработку промежуточного программного обеспечения.

  3. Шаблон (r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}), будет соответствовать чему угодно (я только что проверил это). Если вы хотите найти пустой путь, используйте r('^$', etc.). Это источник вашего бесконечного цикла.

Если вы новичок в регулярных выражениях, файл Django urls.py может выглядеть как F * cking Magic. Я рекомендую начинать очень просто и добавлять по одному правилу за раз. Проведите несколько быстрых тестов, чтобы убедиться, что новое правило a) соответствует вещам, которые вы хотите, чтобы оно соответствовало, и b) не соответствует материалам, которые не должны. В частности, убедитесь, что некоторые из правил, которые встречаются позже в файле, все еще доступны. В этом случае они бы не подняли красный флаг.

...