ImproperlyConfigured: включенный urlconf <project> .urls не содержит никаких шаблонов

63

У меня есть проект django (1.6.x), который отлично работает с dev-сервером, но не работает под Apache2 (2.2.22.1) и mod_wsgi (3.3-4) на Ubuntu 12.04.3 с ошибкой

Неправильноконфигурировано: включенный urlconf erp.urls не имеет никаких шаблонов в нем

Я не понимаю, почему это будет работать с dev-сервером, но не с Apache2/mod_wsgi, и мне трудно найти, откуда исходит ошибка.

Есть несколько других вопросов SO, похожих, но единственное место, где я использую reverse (одна ранее найденная проблема), находится в get_absolute_url в моих моделях - это должно быть хорошо?

В проекте установлен стиль a la Two Scoops, в частности макет:

<repository_root>/<django_project_root>/<configuration_root>/

что соответствует:

erp_root/erp/erp/

и настройки

erp_root/erp/erp/settings/*py (включая __init__.py)

э.и.м./urls.py;

from django.conf import settings
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}, name='login'),
    url(r'^logout/$', 'django.contrib.auth.views.logout_then_login', {}, name='logout'),
    url(r'^search/', include('haystack.urls')),
    url(r'^inventory/', include('inventory.urls')),
)

if settings.DEBUG:
    import debug_toolbar
    urlpatterns += patterns('',
    url(r'^__debug__/', include(debug_toolbar.urls)),
)

и инвентарь /urls.py:

from django.conf.urls import url, patterns
from .forms import CarrierWizardForm1, CarrierWizardForm2, MovementWizardForm1,MovementWizardForm2
from . import views

carrier_wizard_forms = [CarrierWizardForm1, CarrierWizardForm2]
movement_wizard_forms = [MovementWizardForm1, MovementWizardForm2]

urlpatterns = patterns('',
    url(r'^$', views.PartNumberListView.as_view(), name='inventory_list_index'),
    url(r'^parttype/$', views.part_type_list, name='index'),
    url(r'^parttype/(?P<parttype>\d{2})/$', views.part_type_view, name='part_type_view'),
    url(r'^partnumber/$', views.PartNumberListView.as_view(), name='partnumber_list'),
    url(r'^partnumber/add/$', views.PartNumberCreateView.as_view(), name='partnumber_add'),
    url(r'^partnumber/(?P<slug>[-\w]+)/$', views.PartNumberView.as_view(), name='partnumber_view'),
    url(r'^partnumber/(?P<slug>[-\w]+)/update/$', views.PartNumberUpdateView.as_view(), name='partnumber_update'),
    url(r'^partnumber/(?P<slug>[-\w]+)/delete/$', views.PartNumberDeleteView.as_view(), name='partnumber_delete'),
    ....
       )

и erp/settings/dev.py:

# Django settings for erp project.
# settings.py

from unipath import Path

PROJECT_DIR = Path(__file__).ancestor(3)
MEDIA_ROOT = PROJECT_DIR.child("media")
STATIC_ROOT = PROJECT_DIR.child("static")
STATICFILES_DIRS = (
  PROJECT_DIR.child("assets"),
)
TEMPLATE_DIRS = (
  PROJECT_DIR.child("templates"),
)


DEBUG = True
TEMPLATE_DEBUG = DEBUG

TIME_ZONE = 'Australia/Melbourne'
LANGUAGE_CODE = 'en-au'
SITE_ID = 1
USE_TZ = True

DATE_FORMAT = 'd/m/y'
SHORT_DATE_FORMAT = 'd/m/y'

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

# 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 = (
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'stronghold.middleware.LoginRequiredMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'erp.urls'

# Python dotted path to the WSGI application used by Django runserver.
WSGI_APPLICATION = 'erp.wsgi.application'


INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.formtools',
    'django.contrib.humanize',
    'inventory',
    'django_extensions',
    'extra_views',
    'debug_toolbar',
    'django_tables2',
    'stronghold',
    'bootstrap3',
    'haystack',
)

LOGIN_URL = '/login'
LOGOUT_URL = '/logout'

# For Stronghold
STRONGHOLD_PUBLIC_NAMED_URLS = (
    'login',
    'logout',
)

# This is required by the debug toolbar middleware
INTERNAL_IPS = ('192.168.0.16','0.0.0.0','127.0.0.1','::1', '192.168.0.115')

# This is reqquired by django_tables2
TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
                           "django.core.context_processors.debug",
                           "django.core.context_processors.i18n",
                           "django.core.context_processors.media",
                           "django.core.context_processors.static",
                           "django.core.context_processors.tz",
                           "django.contrib.messages.context_processors.messages",
                           "django.core.context_processors.request"
                          )
}

LOGIN_REDIRECT_URL = '/inventory/'

DEBUG_TOOLBAR_PANELS = [
'debug_toolbar.panels.versions.VersionsPanel',
'debug_toolbar.panels.timer.TimerPanel',
'debug_toolbar.panels.settings.SettingsPanel',
'debug_toolbar.panels.headers.HeadersPanel',
'debug_toolbar.panels.request.RequestPanel',
'debug_toolbar.panels.sql.SQLPanel',
'debug_toolbar.panels.staticfiles.StaticFilesPanel',
'debug_toolbar.panels.templates.TemplatesPanel',
'debug_toolbar.panels.cache.CachePanel',
'debug_toolbar.panels.signals.SignalsPanel',
'debug_toolbar.panels.logging.LoggingPanel',
]

def show_toolbar(request):
    return True  # Always show toolbar, for example purposes only.

DEBUG_TOOLBAR_CONFIG = {
'INTERCEPT_REDIRECTS': False,
'INSERT_BEFORE': '</body>',
'ENABLE_STACKTRACES': True,
}

# This is required for Haystack - the search engine
HAYSTACK_CONNECTIONS = {
      'default': {
    'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
    'URL': 'http://127.0.0.1:8085/solr/erp',
  },
}

Мой wsgi - это стандарт с небольшими настройками мод:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "erp.settings.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Мой apache2/sites-avail/erp.conf:

<VirtualHost *:80>
   ServerName deverp
   ServerAdmin administrator
   DocumentRoot /path/www/dev/erp/erp/
   ErrorLog /var/log/apache2/dev/error.log
   CustomLog /var/log/apache2/dev/access.log combined
   WSGIDaemonProcess deverp python-path=/path/www/dev/erp/erp:/path/.virtualenvs/erp-dev/lib/python2.7/site-packages
   WSGIProcessGroup deverp
   WSGIScriptAlias / /path/www/dev/erp/erp/erp/wsgi.py
  <Directory /path/www/dev/erp/erp/erp>
  <Files wsgi.py>
    Order deny,allow
    Allow from all
  </Files>
  </Directory>
</VirtualHost>
  • 0
    В файле erp / wsgi.py попробуйте что-то вроде import sys; import erp.urls; print >> sys.stderr, erp.urls.__file__ а затем проверьте журнал ошибок
  • 0
    добавьте свой apache vhost.conf
Показать ещё 5 комментариев
Теги:

5 ответов

143
Лучший ответ

Итак, я столкнулся с подобной проблемой. Кстати, после того, как вы отправили сообщения в django-stronghold. Проблема на самом деле связана с отсутствием параметра в панели инструментов django-debug.

У вас нет значения:

DEBUG_TOOLBAR_PATCH_SETTINGS = False 

Он будет работать с сервером-сервером, но если вы попытаетесь запустить его с помощью honcho или gunicorn или что-нибудь еще, использующее интерфейс WSGI, он взрывается.

Надеюсь, это поможет!

EDIT: как упоминалось ниже @japhyr, полезно проверить явные инструкции по установке: http://django-debug-toolbar.readthedocs.org/en/1.0/installation.html#explicit-setup

  • 0
    Отличная находка - я бы никогда этого не попробовал. Спасибо, все работает сейчас.
  • 1
    Потрясающие. Рад, что это сработало!
Показать ещё 16 комментариев
14

Я использовал reverse вместо reverse_lazy, чтобы определить параметр url RedirectView.

class YourRedirectView(RedirectView):
    url = reverse('reversed_url')

Так как urls.py еще не инициализирован, ошибка возникает. Просто используйте:

class YourRedirectView(RedirectView):
    url = reverse_lazy('reversed_url')
  • 1
    Это настоящий Django 'Гоча'.
2

У меня возникла аналогичная проблема после обновления с django 1.5 до 1.6. Я не уверен, что мой опыт такой же, как ваш.

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

Проблема, которую я нашел, была связана с wsgi.py. Возможно ли опубликовать этот файл?

  • 0
    Попытался закомментировать admin.autodiscover (), но это ничего не исправило ... приветствует предложение.
  • 0
    Я бы по-прежнему предлагал вам взглянуть на wsgi.py - если он работает на сервере dev, но не на apache / mod wsgi, то подразумевается, что проблема связана с этим интерфейсом.
0

Также убедитесь, что у вас есть urlpatterns в файле, который вы включаете, и что оно написано правильно

0

У меня очень похожая проблема. Мой проект отлично работает на тестовом сервере, но когда я пытаюсь развернуть его до пушки, я получаю такую ​​же неправильную ошибку.

Если я прокомментирую URL-адреса, которые включают другой файл url (т.е. url(r'^admin/', include(admin.site.urls)),, тогда остальные мои URL-адреса будут работать нормально.

[UPDATE] Я смог еще больше сузить его до одного из моих включенных файлов url, но не смог найти ничего особенного в этом. Однако установка Debug=False в моем settings.py файле, по-видимому, исправлена ​​для меня.

  • 0
    Вы используете django-debug-toolbar?
  • 0
    Я был, но после прочтения комментария mgrouchy я отключил его, и это работало даже с Debug = True.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню