3

Django 1.5 でプロジェクトを開始しました。プロファイル アプリの次の URL、ビュー、およびテストがあります。

ブラウズするlocalhost:8000/profilesと問題なく動作します 実行サーバー

しかし、プロファイルアプリのテストを実行する./manage.py test profileと、次の例外で失敗します

  File "<stdlib>/site-packages/django/core/urlresolvers.py", line 342, in RegexURLResolver.urlconf_module
    self = <RegexURLResolver 'yoda.urls' (None:None) ^/>
    340     return self._urlconf_module
    341 except AttributeError:
--> 342     self._urlconf_module = import_module(self.urlconf_name)
    343     return self._urlconf_module
    344
  File "<stdlib>/site-packages/django/utils/importlib.py", line 35, in import_module
    name = 'yoda.urls'
    package = None
     32             break
     33         level += 1
     34     name = _resolve_name(name[level:], package, level)
---> 35 __import__(name)
     36 return sys.modules[name]
ImportError: No module named urls

メイン urls.py

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()


urlpatterns = patterns('',
    url(r'', include('profile.urls', namespace='profile')),
    url(r'^admin/', include(admin.site.urls)),
)

プロファイル アプリの URL

from django.conf.urls import patterns, url


urlpatterns = patterns('profile.views',
    url(r'^u/(?P<username>[\-_\.\w\d]+)/$', view='profile_detail', name='detail'),
    url(r'^profiles/$', view='profile_list', name='list'),
)

profile.views

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.db.models.signals import post_save

from profile import signals
from profile.models import User


@login_required
def profile_list(request, template='profiles/profile_list.html'):
    """ Profiles list """
    return render(request, template, {'profiles': []})


@login_required
def profile_detail(request, username, template='profiles/profile_detail.html'):
    """ Profile details """
    return render(request, template)


# Connect signals and senders
post_save.connect(signals.user_created, sender=User)

プロファイル.テスト

from django.core.urlresolvers import reverse
from django.test import TestCase

from profile.tests.factories import UserFactory


class UrlsTest(TestCase):
    """ Testing urls for category application """
    def setUp(self):
        self.user = UserFactory.build()


    def get(self, url, follow=False):
        return self.client.get(url, follow=follow)


    def test_list_profiles(self):
        """ Page with the list of profiles """
        self.client.login(username=self.user.username, password='pass')
        print(reverse('profile:list'))
        res = self.get(reverse('profile:list'))
        self.assertTrue(res.status_code, 200)
        self.assertTemplateUsed('profile/profile_list.html')

設定

import os
import sys

here = lambda * x: os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(__file__)), *x))

PROJECT_NAME = 'yoda'
PROJECT_ROOT = here('../..')

root = lambda * x: os.path.abspath(os.path.join(os.path.abspath(PROJECT_ROOT), *x))

sys.path.insert(0, root('yoda'))
sys.path.insert(0, PROJECT_ROOT)
sys.path.insert(0, root('apps'))
...
ROOT_URLCONF = 'yoda.urls'

このような問題の原因は何ですか? かなり同じ構成のプロジェクトで、Django 1.4.5 では正常に動作します。

Django 内部のデバッグ

Django をデバッグしようとしましたdjango.core.urlresolvers:263ROOT_URLCONF='yoda.urls'上記のエラーで失敗した場合、私は試してみましたが、うまくいきyoda.yoda.urlsました。私はこの問題について混乱していますが、まだ修正しようとしています。

ipdb> __import__('yoda.yoda.urls')
<module 'yoda' from '/Users/sultan/.virtualenvs/yoda/yoda/__init__.pyc'>

小さなアップデート

設定からROOT_URLCONFを受け取ると、次のエラーが発生します

> /Users/sultan/.virtualenvs/yoda/lib/python2.7/site-packages/django/core/urlresolvers.py(351)url_patterns()
    350     def url_patterns(self):
--> 351         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
    352         try:

ipdb> l
    346             self._urlconf_module = import_module(self.urlconf_name)
    347             return self._urlconf_module
    348
    349     @property
    350     def url_patterns(self):
--> 351         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
    352         try:
    353             iter(patterns)
    354         except TypeError:
    355             raise ImproperlyConfigured("The included urlconf %s doesn't have any patterns in it" % self.urlconf_name)
    356         return patterns

ipdb> self.urlconf_module
*** ImportError: No module named urls
4

1 に答える 1

6

urls.pyyoda という名前のアプリの外部でファイルを作成した場合は、

ROOT_URLCONF = 'urls'

urls.pyモジュールで作成した場合は、設定します

ROOT_URLCONF = 'modulename.urls'

これで試してください

于 2013-04-02T10:45:59.010 に答える