【问题标题】:Cannot Import Name (model)无法导入名称(型号)
【发布时间】:2015-04-23 16:28:23
【问题描述】:

我收到了上面的错误消息,更具体地说,“ImportError at /ops_page/create”“无法导入名称 ops_page。”基本上,我有一个名为“ops_page”的应用程序,但我似乎无法获得新创建的 url,“/ops_page/create”,它应该包含一个与“ops_page”中的模型相对应的表单。我查看了类似的线程,并尝试删除 ops_page 应用程序以及根目录中的 .pyc 文件,以及删除 sqlite db 并重新同步/迁移。知道这里可能存在什么问题吗?

我的基本 urls.py:

urlpatterns = patterns('',
    .
    .
    url(r'^ops_page/', include('ops_page.urls')),
    .
    .
)

我的 ops_page urls.py:

urlpatterns = patterns('',
    url(r'^create/$', 'ops_page.views.create'),
)

我的 ops_page models.py:

from django.db import models
from django.conf import settings
import os.path



class OpsPageInfo(models.Model):
        campaign_name = models.CharField(max_length=100, unique=True, blank=True)
        campaign_pic = models.ImageField(upload_to="images/opspage_pics")
        description_header = models.CharField(max_length=100, blank=True)
        campaign_description = models.CharField(max_length=600, blank=True)
        goal = models.CharField(max_length=100, blank=True)
        perk_header1 = models.CharField(max_length=100, blank=True)
        perk_description1 = models.CharField(max_length=600, blank=True)


        def __unicode__(self):
                return self.campaign_name

我的 ops_page views.py:

from django.shortcuts import render_to_response
from ops_page.models import OpsPageInfo
from django.http import HttpResponse
from forms import OpsPageForm
from django.http import HttpResponseRedirect


def create(request):
    if request.POST:
        form = OpsPageForm(request.POST)
        if form.is_valid():
            form.save()


            return HttpResponseRedirect('/artist_donation/')

    else:
        form = OpsPageForm()

    args = {}
    args.update(csrf(request))

    args['form'] = form

    return render_to_response('create_opspage.html', args)

我的 ops_page forms.py:

from django import forms
from models import ops_page


class OpsPageForm(forms.ModelForm):

    class Meta:
        model = ops_page

create_opspage.html 表单:

            {% block content %}
            <form action="/ops_page/create/" method="post">{% csrf_token %}
                <ul>
                {{ form.as_ul }}
                </ul>

                <input type="submit" name="submit" value="Create Ops Page">
            </form>
            {% endblock %}

最后,我的错误的追溯:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/ops_page/create

Django Version: 1.7.5
Python Version: 2.7.5
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'band',
 'friend',
 'registration',
 'music',
 'audiofield',
 'user_profile',
 'social.apps.django_app.default',
 'directory',
 'youtube_urls',
 'ops_page')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'audiofield.middleware.threadlocals.ThreadLocals')


Traceback:
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/core/handlers/base.py" in get_response
  87.                 response = middleware_method(request)
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/middleware/common.py" in process_request
  73.                     urlresolvers.is_valid_path("%s/" % request.path_info, urlconf)):
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/core/urlresolvers.py" in is_valid_path
  619.         resolve(path, urlconf)
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/core/urlresolvers.py" in resolve
  494.     return get_resolver(urlconf).resolve(path)
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/core/urlresolvers.py" in resolve
  345.                     sub_match = pattern.resolve(new_path)
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/core/urlresolvers.py" in resolve
  345.                     sub_match = pattern.resolve(new_path)
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/core/urlresolvers.py" in resolve
  224.             return ResolverMatch(self.callback, args, kwargs, self.name)
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/core/urlresolvers.py" in callback
  231.         self._callback = get_callable(self._callback_str)
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/utils/lru_cache.py" in wrapper
  101.                     result = user_function(*args, **kwds)
File "/Library/Python/2.7/site-packages/Django-1.7.5-py2.7.egg/django/core/urlresolvers.py" in get_callable
  97.             mod = import_module(mod_name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py" in import_module
  37.     __import__(name)
File "/Users/sethjones/Desktop/atmos_v6/ops_page/views.py" in <module>
  4. from forms import OpsPageForm
File "/Users/sethjones/Desktop/atmos_v6/ops_page/forms.py" in <module>
  2. from models import ops_page

Exception Type: ImportError at /ops_page/create
Exception Value: cannot import name ops_page

我对 django 比较陌生,所以这可能是我的语法错误或者我没有正确映射事物。任何帮助将不胜感激。谢谢你。

【问题讨论】:

    标签: python django url importerror


    【解决方案1】:

    重要的行:

    File "/Users/sethjones/Desktop/atmos_v6/ops_page/forms.py" in <module>
      2. from models import ops_page
    

    它告诉您导入不正确。现在,如果你检查你的forms.py 文件,你会看到from models import ops_page 这行确实是错误的。应该是from models import OpsPageInfo

    另外,您需要将表单模型属性更改为 model = OpsPageInfo 而不是 model = ops_page

    【讨论】:

      【解决方案2】:

      问题在于你的forms.py

      from models import ops_page
      

      应该替换为

      from ops_page.models import OpsPageInfo
      

      在您的OpsPageFormMeta 类中,将model 设置为OpsPageInfo

      views.py 中还有另一个导入问题,替换

      from forms import OpsPageForm
      

      通过

      from opt_page.forms import OpsPageForm
      

      【讨论】:

        【解决方案3】:

        修复了一个类似的问题,即视图与模型的名称完全相同。只花了半个小时就搞定了。认为它可以帮助某人。

        【讨论】:

          【解决方案4】:

          刚刚有这个,正在尝试import my_project.models

          但在my_project 中有一个名为my_project.py 的文件

          所以python试图从my_project.py而不是my_project(目录)做my_project.models

          希望这对某人有所帮助

          【讨论】:

            【解决方案5】:

            您需要在导入时为表单和模型添加前缀 . (句点)或应用程序的名称(从那时起不建议您在不需要时将应用程序的名称硬编码到您的项目中)。

            所以改变:

            from forms import OpsPageForm
            

            from .forms import OpsPageForm
            

            并改变:

            from models import OpsPageInfo
            

            到:

            from .models import OpsPageInfo
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-05-29
              • 1970-01-01
              • 1970-01-01
              • 2019-03-10
              • 1970-01-01
              相关资源
              最近更新 更多