【问题标题】:ImportError: No module named myapp_o.urlsImportError:没有名为 myapp_o.urls 的模块
【发布时间】:2017-08-07 19:01:36
【问题描述】:

我正在处理一个 django-oscar 项目。我一直在到处寻找解决这个问题的方法。虽然,我在这里遇到了类似的问题,但我仍然无法解决问题。

我正在尝试创建其他页面,例如“关于”和“联系人”。我已经检查了仪表板以创建页面,但似乎无法完全按照我的意愿行事。我希望能够将这些页面放在页脚区域。我能够将在仪表板上创建的这些页面显示到我的页脚,但仅显示文本似乎很简单。想知道我是否可以做得更多。

我在我的应用程序文件夹中创建了一个应用程序。这是文件夹结构:

这是我的环境安装 -

pip freeze requirements.txt

    Babel==2.3.4<
    beautifulsoup4==4.5.1
    colorama==0.3.7
    coverage==3.7.1
    coveralls==0.4.4
    detox==0.10.0
    Django==1.9.12
    django-appconf==1.0.2
    django-compressor==1.6
    django-countries==4.0
    django-debug-toolbar==1.5
    django-extra-views==0.6.4
    django-haystack==2.5.1
    django-localflavor==1.3
    django-nose==1.4.2
    django-oscar==1.3
    -e git://github.com/tangentlabs/django-oscar-      paypal.git@76542cefa67170b10694ab431a0b35408d99b16e#egg=django_oscar_paypal
   django-static-precompiler==1.5
   django-tables2==1.0.7
   django-treebeard==4.1.0
   django-webtest==1.7.7
   django-widget-tweaks==1.4.1
   docopt==0.6.2
   enum-compat==0.0.2
   enum34==1.1.6
   eventlet==0.20.0
   factory-boy==2.7.0
   fake-factory==0.7.2
   flake8==2.2.3
   funcsigs==1.0.2
   greenlet==0.4.11
   ipaddress==1.0.17
   mccabe==0.5.2
   mock==1.0.1
   mod-wsgi==4.5.11
   nose==1.3.7
   pbr==1.10.0
   pep8==1.7.0
   phonenumbers==7.7.5
   Pillow==3.4.2
   pinocchio==0.4.1
   pluggy==0.3.1
   purl==1.3
   py==1.4.31
   pycountry==16.11.27.1
   pyflakes==1.3.0
   pytest==3.0.1
   pytest-cov==2.3.1
   pytest-django==3.0.0
   python-dateutil==2.6.0
   pytz==2016.10
   PyYAML==3.12
   requests==2.12.3
   six==1.10.0
   sorl-thumbnail==12.4a1
   sqlparse==0.2.2
   tox==2.1.0
   Unidecode==0.4.19
   virtualenv==15.1.0
   waitress==1.0.1
   WebOb==1.6.3
   WebTest==2.0.16`

这里是 myapp views.py

from django.http import HttpResponse
from django.core.urlresolvers import reverse


def about(request):
   return HttpResponse(request, "my about page", {})

def contacts(request):
   return HttpResponse(request, "my contact page", {})

这里是apps.myapp urls.py

from django.conf.urls import url

from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns`

from . import views
from apps.myapp import views



urlpatterns = patterns ('',
  url(r'^en-gb/contacts/', views.contacts, name='contacts'),
  url(r'^/about/', views.about, name='about'),

)

这里是 mysite (root) urls.py

from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.conf import settings
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static

from apps.app import application
from paypal.payflow.dashboard.app import application as payflow
from paypal.express.dashboard.app import application as express_dashboard
admin.autodiscover()

from apps.app import myapp_o



 '''everything else has to have the include apart from the admin'''

 urlpatterns = patterns
 [
   '',
   (r'^admin/', admin.site.urls),
   url(r'^i18n/', include('django.conf.urls.i18n')),
   url(r'^myapp_o/', include('apps.myapp_o.urls')),
]

urlpatterns += i18n_patterns('',
  # PayPal Express integration...
  (r'^checkout/paypal/', include('paypal.express.urls')),
  # Dashboard views for Payflow Pro
  (r'^dashboard/paypal/payflow/', include(payflow.urls)),
  # Dashboard views for Express
  (r'^dashboard/paypal/express/', include(express_dashboard.urls)),
  (r'', include(application.urls)),
  '''(r'^myapp_o/', include('myapp_o.urls')),'''

  )

 if settings.DEBUG:
   urlpatterns += staticfiles_urlpatterns()
   urlpatterns += static(
      settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

谁能分享并告诉我哪里出错了?还是在仪表板中这样做更好?

谢谢

夏娃

需要从我的设置中添加信息

导入操作系统

 INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'django.contrib.flatpages',
    'django.contrib.staticfiles',
    'mod_wsgi.server',
    # External apps
    # 1.5.7 still ships with South migrations in the wrong folder,
    # 1.5.8 contains a fix. Upgrade when released.
    # 'django_extensions',
   'debug_toolbar',
    # Apps from oscar
   'paypal',
   'compressor',
   'widget_tweaks',

   ]



from oscar import get_core_apps
INSTALLED_APPS = INSTALLED_APPS + get_core_apps([
    'apps.shipping',
    'apps.checkout',
    'apps.myapp',])

谢谢。

【问题讨论】:

    标签: python django django-oscar


    【解决方案1】:

    让我们先检查您的代码:

    apps/myapp/urls.py,你不应该这样导入。

    from . import views
    from apps.myapp import views
    

    因为稍后 views 会覆盖第一个 views var。所以你的代码应该用from . import viewsfrom views import about, contacts 来改变,以获得清晰的导入。

    其次,在 Django 1.8 之后,urlpatterns 不再使用patterns。你应该考虑在Django1.10之后使用url函数来使用你的代码(在1.10之后patterns被弃用了)。

    所以你的代码可以这样改变:

    urlpatterns = [
      url(r'^en-gb/contacts/$', views.contacts, name='contacts'),
      url(r'^about/$', views.about, name='about'),
    ]
    

    我还在您的网址末尾添加$ 以完全匹配用户请求中的网址。

    第三,当我用 i18n_patterns 搜索 django 文档时,

    您可以使用 django 的 urlsString 包括 include('paypal.express.urls')

    我认为你的网址可以是这样的:

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^i18n/', include('django.conf.urls.i18n')),
        url(r'^myapp_o/', include('apps.myapp_o.urls')),
    ]
    urlpatterns += i18n_patterns(
      # PayPal Express integration...
      url(r'^checkout/paypal/', include('paypal.express.urls')),
      # Dashboard views for Payflow Pro
      url(r'^dashboard/paypal/payflow/', include(payflow.urls)),
      # Dashboard views for Express
      url(r'^dashboard/paypal/express/', include(express_dashboard.urls)),
      url(r'', include('apps.myapp_o.urls')),    
      )
    

    请记住,当您使用字符串导入时,您不必从应用程序导入视图。 如果这件事不起作用,请发表评论。

    【讨论】:

    • 除非我注释掉,否则我仍然有同样的错误
    • 在根mysite url.py urlpatterns =[ url(r'^admin/', admin.site.urls), url(r'^i18n/', include('django.conf. urls.i18n')), #url(r'^myapp_o/', include('apps.myapp_o.urls')), ]
    • urlpatterns += i18n_patterns( # PayPal Express 集成... url(r'^checkout/paypal/', include('paypal.express.urls')), # Payflow Pro url 的仪表板视图(r'^dashboard/paypal/payflow/', include(payflow.urls)), # Express url(r'^dashboard/paypal/express/', include(express_dashboard.urls)), url(r' ', include(application.urls)), #url(r'^myapp_o/', include('myapp_o.urls')), )
    • 这里又是错误。 ImportError:没有名为 myapp_o.urls 的模块
    • 谢谢。我在仪表板、内容和页面下找到了一种更简单的方法来执行此操作。但我确实从你的代码中学到了一个让。
    最近更新 更多