Django cmsplugin-блог не работает

Я установил Django 1.3 с помощью django-cms. Все работает корректно. После этого я установил cmsplugin-blog (со страницы расширений сайта djanog-cms), версия 1.1.1.

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

from django.conf import settings
from django.conf.urls.defaults import *
from django.core.urlresolvers import reverse
from django.views.generic.date_based import archive_year, archive_month, archive_day, object_detail
from django.views.generic.list_detail import object_list

from tagging.views import tagged_object_list

from menus.utils import set_language_changer

from cms.models import Title
from cms.utils.urlutils import urljoin

from cmsplugin_blog.feeds import EntriesFeed, TaggedEntriesFeed, AuthorEntriesFeed
from cmsplugin_blog.models import Entry
from cmsplugin_blog.views import EntryDateDetailView, EntryArchiveIndexView

blog_info_dict = {
    'queryset': Entry.objects.all(),
    'date_field': 'pub_date',
    'allow_empty': True,
    'paginate_by': 15,
}

blog_info_tagged_dict = {
    'queryset_or_model': Entry.objects.all(),
    'allow_empty': True,
}

blog_info_author_dict = {
    'queryset': Entry.objects.all(),
    'allow_empty': True,
    'template_name': 'cmsplugin_blog/entry_author_list.html',
}

blog_info_month_dict = {
    'queryset': Entry.objects.all(),
    'date_field': 'pub_date',
    'month_format': '%m',
    'allow_empty': True,
}

blog_info_year_dict = {
    'queryset': Entry.objects.all(),
    'date_field': 'pub_date',
    'make_object_list': True,
    'allow_empty': True,
}

blog_info_detail_dict = dict(blog_info_month_dict, slug_field='entrytitle__slug')

def language_changer(lang):
    request = language_changer.request
    return request.get_full_path()

blog_archive_index = EntryArchiveIndexView.as_view()

def blog_archive_year(request, **kwargs):
    kwargs['queryset'] = kwargs['queryset'].published()
    set_language_changer(request, language_changer)
    return archive_year(request, **kwargs)

def blog_archive_month(request, **kwargs):
    kwargs['queryset'] = kwargs['queryset'].published()
    set_language_changer(request, language_changer)
    return archive_month(request, **kwargs)

def blog_archive_day(request, **kwargs):
    kwargs['queryset'] = kwargs['queryset'].published()
    set_language_changer(request, language_changer)
    return archive_day(request, **kwargs)

blog_detail = EntryDateDetailView.as_view()

def blog_archive_tagged(request, **kwargs):
    kwargs['queryset_or_model'] = kwargs['queryset_or_model'].published()
    set_language_changer(request, language_changer)
    return tagged_object_list(request, **kwargs)

def blog_archive_author(request, **kwargs):
    author = kwargs.pop('author')
    kwargs['queryset'] = kwargs['queryset'].published().filter(entrytitle__author__username=author)
    kwargs['extra_context'] = {
        'author': author,
    }
    set_language_changer(request, language_changer)
    return object_list(request, **kwargs)

urlpatterns = patterns('',
    (r'^$', blog_archive_index, blog_info_dict, 'blog_archive_index'),
    (r'^(?P<year>\d{4})/$', 
        blog_archive_year, blog_info_year_dict, 'blog_archive_year'),
    (r'^(?P<year>\d{4})/(?P<month>\d{2})/$', 
        blog_archive_month, blog_info_month_dict, 'blog_archive_month'),
    (r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$', 
        blog_archive_day, blog_info_month_dict, 'blog_archive_day'),
    (r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$', 
        blog_detail, blog_info_detail_dict, 'blog_detail'),
    (r'^tagged/(?P<tag>[^/]*)/$', blog_archive_tagged, blog_info_tagged_dict, 'blog_archive_tagged'),
    (r'^author/(?P<author>[^/]*)/$', blog_archive_author, blog_info_author_dict, 'blog_archive_author'),
    (r'^rss/any/tagged/(?P<tag>[^/]*)/$', TaggedEntriesFeed(), {'any_language': True}, 'blog_rss_any_tagged'),
    (r'^rss/tagged/(?P<tag>[^/]*)/$', TaggedEntriesFeed(), {}, 'blog_rss_tagged'),
    (r'^rss/any/author/(?P<author>[^/]*)/$', AuthorEntriesFeed(), {'any_language': True}, 'blog_rss_any_author'),
    (r'^rss/author/(?P<author>[^/]*)/$', AuthorEntriesFeed(), {}, 'blog_rss_author'),
    (r'^rss/any/$', EntriesFeed(), {'any_language': True}, 'blog_rss_any'),
    (r'^rss/$', EntriesFeed(), {}, 'blog_rss')      
)

Любая помощь приветствуется! Если нужны дополнительные настройки, могу опубликовать. Спасибо

settings.py

# -*- coding: utf-8 -*-
import os

gettext = lambda s: s

PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))



DEBUG = True
TEMPLATE_DEBUG = DEBUG


MANAGERS = ADMINS

DEFAULT_LANGUAGE = 0

DATABASES = {
    'default': {
        'ENGINE': '*******',
        'NAME': '*******',
        'USER': '*******',
        'PASSWORD': '*********',
        'HOST': '*******',
        'PORT': '*******',
    }
}

TIME_ZONE = 'Europe/Amsterdam'
LANGUAGE_CODE = 'nl'
SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale
USE_L10N = True

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')

# Make this unique, and don't share it with anybody.
SECRET_KEY = '**************************'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

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',
    'cms.middleware.page.CurrentPageMiddleware',
    'cms.middleware.user.CurrentUserMiddleware',
    'cms.middleware.toolbar.ToolbarMiddleware',

    'cms.middleware.multilingual.MultilingualURLMiddleware', 
    'cmsplugin_blog.middleware.MultilingualBlogEntriesMiddleware',

    'debug_toolbar.middleware.DebugToolbarMiddleware',
)    

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.auth',
    'django.core.context_processors.i18n',
    'django.core.context_processors.request',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'cms.context_processors.media',
    'sekizai.context_processors.sekizai',
)

CMS_TEMPLATES = (
    ('base.html', 'Main Template'),
)

ROOT_URLCONF = 'urls'

TEMPLATE_DIRS = (
    os.path.join(PROJECT_DIR, 'templates'),
)

#for cms-blog
JQUERY_JS = 'https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'
JQUERY_UI_JS = 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js'
JQUERY_UI_CSS = 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/themes/smoothness/jquery-ui.css'

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'django.contrib.staticfiles',

    'debug_toolbar',

    'cms',
    'menus',
    'mptt',
    'south',
    'cms.plugins.text',
    'cms.plugins.picture',
    'cms.plugins.link',
    'cms.plugins.file',
    'cms.plugins.snippet',
    'cms.plugins.googlemap',
    'sekizai',

    'cmsplugin_contact',

    'cmsplugin_blog',
    'djangocms_utils',
    'simple_translation',
    'tagging',
    'staticfiles',
)

cms_app.py:

from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _

class BlogApphook(CMSApp):
    name = _("Blog Apphook")
    urls = ["cmsplugin_blog.urls"]

apphook_pool.register(BlogApphook)

person Hussam    schedule 17.01.2012    source источник
comment
веб-сайт находится по адресу: shoestore.aspeqt.nl   -  person Hussam    schedule 18.01.2012
comment
urls.py, где вы включаете URL-адреса блога, будет полезен   -  person AdamKG    schedule 18.01.2012
comment
в папке моего основного сайта у меня есть этот urls.py: `из шаблонов импорта django.conf.urls.defaults, включите URL из django.contrib import admin admin.autodiscover() urlpatterns = Patterns('', url(r' ^admin/', include(admin.site.urls)), url(r'^', include('cms.urls')) )`   -  person Hussam    schedule 18.01.2012
comment
Можешь вставить? Откуда взялся префикс '/nl'? редактировать: хорошо, похоже, теперь это работает!   -  person AdamKG    schedule 18.01.2012
comment
Прикрепили ли вы блог к страница?   -  person Timmy O'Mahony    schedule 18.01.2012
comment
Нет, все еще не работает, это была тестовая страница php, извините за это :(   -  person Hussam    schedule 18.01.2012
comment
блог подключается через appHook django-cms   -  person Hussam    schedule 18.01.2012
comment
и префикс /nl из-за многоязычного промежуточного программного обеспечения. Если я уберу их из конфига, префикс nl исчезнет   -  person Hussam    schedule 18.01.2012


Ответы (2)


Вам необходимо подключить Apphook приложения блога к странице (см. http://readthedocs.org/docs/django-cms/en/latest/extending_cms/extending_examples.html#my-first-app-apphook).

Вы должны сделать это для каждого языка.

После этого вам, к сожалению, придется перезагрузить сервер.

person ojii    schedule 18.01.2012
comment
Приложение уже подключено к cms_app.py. Это приложение является стандартным расширением приложения django-cms. Мой cms_app.py выглядит как код, вставленный в сообщение - person Hussam; 19.01.2012
comment
cms_app.py — это просто определение приложения, а не сам хук. сам хук находится в разделе "дополнительные настройки" в админке страницы - person ojii; 19.01.2012
comment
Теперь я на шаг впереди. Отказавшись от приложения cmsplugin-blog, я попытался установить Zinnia, другое приложение для блогов. Кажется, я продолжаю получать ту же ошибку: нет обратного совпадения. Это произошло с 3 разными приложениями, но я очень не понимаю, что означает эта ошибка :( - person Hussam; 20.01.2012

Не берите в голову. Я нашел решение (решения).... После многих часов отладки я обнаружил, что это все-таки моя ошибка. Я использую wsgi, и настройки в файле apache.wsgi были неверными. В моем sys.path я также добавил путь из другого проекта django. Поскольку это добавление было первым, ни одно из моих приложений никогда не могло прочитать правильные файлы настроек и файлы url.py.

После этого мне потребовалось некоторое время, чтобы понять, почему не работает приложение zinnia (я перешел с cmsplugin-blog на zinnia, у которого гораздо больше возможностей). Этот пост помог в правильном направлении: http://groups.google.com/group/django-blog-zinnia/browse_thread/thread/4de2827343fb79e0

После того, как я разместил шаблоны URL в правильном порядке, все заработало нормально!

person Hussam    schedule 20.01.2012