web-dev-qa-db-fra.com

ImproperlyConfigured: l'urlconf <projet> .urls inclus ne contient aucun modèle

J'ai un projet Django (1.6.x) qui fonctionne correctement avec le serveur dev, mais échoue sous Apache2 (2.2.22.1) et mod_wsgi (3.3-4) sur Ubuntu 12.04.3 avec l'erreur

ImproperlyConfigured: Le fichier urlconf erp.urls inclus ne contient aucun motif.

Je ne comprends pas pourquoi cela fonctionnerait avec le serveur de développement mais pas avec Apache2/mod_wsgi et je trouve difficile de localiser l'origine de l'erreur.

Il y a un certain nombre d'autres questions SO similaires, mais le seul endroit où j'utilise reverse (un problème rencontré précédemment) se trouve dans get_absolute_url dans mes modèles - cela devrait aller?

Le projet est mis en place dans le style Two Scoops, en particulier:

<repository_root>/<Django_project_root>/<configuration_root>/

qui se traduit par:

erp_root/erp/erp/

et les réglages sont

erp_root/erp/erp/settings/*py (y compris le __init__.py)

erp/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)),
)

et inventaire/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'),
    ....
       )

et 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's 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',
  },
}

Mon wsgi est la norme avec les paramètres mineurs mod:

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

Mon Apache2/sites-avail/erp.conf est:

<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>
63
datakid

J'ai donc rencontré un problème similaire. Par coïncidence après avoir posté dans les numéros de Django-stronghold . Le problème est en fait dû à un paramètre manquant dans Django-debug-toolbar.

Le paramètre qui vous manque est:

DEBUG_TOOLBAR_PATCH_SETTINGS = False 

Cela fonctionnera avec le serveur d'exécution, mais si vous essayez de l'exécuter avec honcho ou gunicorn, ou avec tout ce qui utilise l'interface WSGI, il explose. 

J'espère que cela t'aides!

EDIT: comme mentionné ci-dessous par @japhyr, il est utile de consulter les instructions d'installation explicites: http://Django-debug-toolbar.readthedocs.org/en/1.0/installation.html#explicit-setup

150
mgrouchy

J'ai utilisé reverse au lieu de reverse_lazy pour définir le paramètre url d'un RedirectView .

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

Depuis que urls.py n’a pas encore été initialisé, l’erreur monte. Il suffit d'utiliser:

class YourRedirectView(RedirectView):
    url = reverse_lazy('reversed_url')
14
Tobias Lorenz

J'ai eu un problème similaire après la mise à niveau de Django 1.5 à 1.6. Je ne sais pas si mon expérience est la même que la vôtre.

Tout d’abord, pouvez-vous faire défiler les erreurs et vérifier que admin.autodiscover() est ce qui cause le problème? Vous pouvez également commenter cette ligne et voir si une page va se charger.

Le problème que j'ai trouvé était lié à wsgi.py. Est-il possible pour vous de poster ce fichier?

2
Luke

J'ai un problème très similaire. Mon projet fonctionne bien sur le serveur de test, mais lorsque j'essaie de déployer sur gunicorn, je reçois la même erreur ImproperlyConfigured.

Si je commente les URL qui incluent un autre fichier d’URL (c.-à-d. url(r'^admin/', include(admin.site.urls)),, le reste de mes URL fonctionne correctement.

[MISE À JOUR] J'ai été en mesure de le réduire à un seul de mes fichiers d'URL inclus, mais je n'ai rien trouvé de spécial à ce sujet. Cependant, la définition de Debug=False dans mon fichier settings.py semble avoir été corrigée pour moi.

0
Pablo Gomez

Assurez-vous également que vous avez urlpatterns dans le fichier que vous incluez et qu'il est orthographié correctement.

0
surfer190