Невозможно импортировать имя (модель)
Я получаю сообщение об ошибке выше, более конкретно "ImportError at /ops_page/create" "не может импортировать имя ops_page". По сути, у меня есть приложение под названием "ops_page", и я не могу получить недавно созданный URL-адрес "/ ops_page / create", который должен содержать форму, соответствующую модели в "ops_page". Я посмотрел на похожие темы и попытался удалить файлы.pyc в приложении ops_page, а также в корневом каталоге, а также удалить базу данных sqlite и выполнить повторную синхронизацию / миграцию. Любая идея, что проблема может быть здесь?
Моя база 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, так что это может быть ошибка в моем синтаксисе, или я не правильно отобразил вещи. Любая помощь будет принята с благодарностью. Спасибо.
5 ответов
Линия, которая имеет значение:
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
Вопрос заключается в вашем forms.py
,
from models import ops_page
следует заменить на
from ops_page.models import OpsPageInfo
И в твоем OpsPageForm
"s Meta
класс, набор model
в OpsPageInfo
,
У вас есть другая проблема импорта в views.py
заменить
from forms import OpsPageForm
от
from opt_page.forms import OpsPageForm
Исправлена аналогичная проблема, когда вид был назван точно так же, как модель. Просто потратил на это полчаса. Думал, что это может кому-то помочь.
Просто имел это, пытался import my_project.models
но был файл в my_project
называется my_project.py
Так питон пытался сделать my_project.models
от my_project.py
вместо my_project
(Direcory)
Надеюсь, это поможет кому-то
Вам необходимо добавить префикс форм и моделей в ваш импорт с. (точка) или название приложения (не рекомендуется с тех пор, как вам будет трудно запрограммировать название приложения в своем проекте, когда вам это тоже не нужно).
так что поменяйте:
from forms import OpsPageForm
в
from .forms import OpsPageForm
и изменить:
from models import OpsPageInfo
чтобы:
from .models import OpsPageInfo