【问题标题】:django- Exception Value: No module named urlsdjango-异常值:没有名为 urls 的模块
【发布时间】:2017-07-14 13:46:55
【问题描述】:

我创建了一个urlsviews 文件夹,例如templates,但它不起作用。 我收到错误: Exception Value: No module named urls

这是我的项目的样子:

requirements.txt:

Django==1.6.5
pymongo==2.8

.

├── DjangoProject
│   ├── DjangoProject
│   │   ├── app
│   │   │   ├── __init__.py
│   │   │   ├── __init__.pyc
│   │   │   ├── models.py
│   │   │   ├── models.pyc
│   │   │   ├── templates
│   │   │   ├── tests.py
│   │   │   ├── urls
│   │   │   │   └── test.py
│   │   │   └── views
│   │   │       └── test.py
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   ├── settings.py
│   │   ├── settings.pyc
│   │   ├── urls.py
│   │   ├── wsgi.py
│   │   └── wsgi.pyc
│   └── manage.py
└── requirements.txt

settings.py 文件:

INSTALLED_APPS = (
    'DjangoProject.app',
     ........
)
ROOT_URLCONF = 'DjangoProject.app.urls'

DjangoProject/urls.py:

urlpatterns = patterns('',
    url(r'^$', include('DjangoProject.app.urls')),  
    url(r'^admin/', include(admin.site.urls)),
)

app/urls/test.py:

from django.conf.urls import patterns, url
urlpatterns = patterns('DjangoProject.app.views.test',
        url(r'^/create/$','first_view',name='first_view'),
)

app/views/test.py:

from django.shortcuts import render, render_to_response
from django.http import HttpResponse
from django.template import loader
from django.template import RequestContext

def first_view(request):
    return HttpResponse("Hi")

【问题讨论】:

  • 我不明白你的 url 和视图文件是什么。它们真的都称为 test.py,在称为 url 和视图的目录中吗?如果是,为什么?
  • 是的,都称为 test.py,在称为 url 和视图的目录中。我的计划是创建一个主要的应用程序,并在不同的应用程序中通过链接调用,例如网站管理员。 init.py 会帮助我吗?
  • 好吧,不要。将这些文件移动到 app 目录中,然后将它们命名为 urls.py 和 views.py。

标签: python django module python-import


【解决方案1】:

由于您试图使其像模块一样工作,请尝试添加__init__.py 在具有以下内容的 url 和 views 文件夹中

from .test import *

为了进一步解释您的问题,__init__.py 将放在DjangoProject/DjangoProject/app/urls/DjangoProject/DjangoProject/app/views/ 中。

要使用ROOT_URLCONF = 'DjangoProject.app.urls',您还必须将所有内容导入__init__.py 文件。

对于这里看到的导入视图的用例。

from django.conf.urls import patterns, url
urlpatterns = patterns('DjangoProject.app.views.test',        
    url(r'^/create/$','first_view',name='first_view'),
)

您甚至不必在 __init__.py 视图中导入任何内容。

【讨论】:

  • 以上两个是我找到的链接。我想为一个主要应用程序的视图和 URL 创建模块(文件夹)。我知道 init.py 会帮助我,但是,我不知道怎么做?你能给我详细说明一下吗?而且我在settings.py中的ROOT_URLCONF和DjangoProject/urls.py中的url是对的吗?
  • __init__.py 文件将进入您要用作模块的每个文件夹。因此,在这种情况下,它将进入DjangoProject/DjangoProject/app/urls/__init__.py,对于视图文件夹也是如此。此外,您还必须将要在模块级别访问的 __init__.py 导入。
  • 你是对的......谢谢你先生。 pyvkd。简直是天才。你救我免于溺水。我在空中~~~
【解决方案2】:

django 架构的想法是为每个应用程序创建一个 url 和视图文件。请记住,urls.py 存储了应用程序中的所有 url,如果您想扩展它,请尝试创建另一个应用程序。我的建议是使用 tests.py 删除该文件夹并将文件直接构建到您的 DjangoApp 文件夹中。

另外,正如上面的评论所说,为了让 python 将文件夹视为模块,您应该创建一个名为 __init__.py 的文件,请查看 What is __init__.py for?

【讨论】:

    【解决方案3】:

    您的应用程序文件结构和配置有问题。 阅读:https://docs.djangoproject.com/en/1.11/intro/tutorial01/

    例如: 您应该将 view.py 中的函数分配给它的 url,所以在这一行中:

    url(r'^/create/$','first_view',name='first_view'),
    

    改成:

    url(r'^/create/$', views.first_view, name='first_view'),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-13
      • 2012-05-18
      • 2016-06-15
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 2012-06-26
      相关资源
      最近更新 更多