Как устранить эти ошибки Python в Django? - PullRequest
2 голосов
/ 23 января 2012

Я пытаюсь пройтись по учебному пособию по Django Project.

Я сделал это так: https://docs.djangoproject.com/en/1.3/intro/tutorial02/#s-make-the-poll-app-modifiable-in-the-admin, но я вижу ошибки в некоторых файлах, например в файле admin.py:

from polls.models import Poll
from django.contrib import admin

admin.site.register(Poll)

Я получаю ошибку

Unresolved import: Poll

Модели определены, как указано в руководстве:

import datetime

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __unicode__(self):
        return self.question
    def was_published_today(self):
        return self.pub_date.date() == datetime.date.today()

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
    def __unicode__(self):
        return self.choice

В руководстве говорится, что при перезапуске сервера после добавления файла администратора я должен увидеть приложение Poll, на которое ссылается страница администратора в 127.0.0.1:8000, но я вижу только следующее:

Model admin without registered models

Я тоже вижу

Unresolved import: Poll admin.py    /newProj/src/newProj/polls  line 0  PyDev Problem
Unresolved import: settings manage.py   /firstproject/firstproject  line 10 PyDev Problem
Unresolved import: settings manage.py   /newProj/src/newProj    line 10 PyDev 

Являются ли ошибки причиной того, что я не вижу страницы администрирования сайта, обновленной с помощью приложения Опросы?

Как я могу устранить эти ошибки?

Ответы [ 4 ]

2 голосов
/ 23 января 2012

/newProj/src/newProj/polls и /firstproject/firstproject ... э-э, это выглядит честно, как источник нескольких проблем.Хорошо, несколько концепций:

Пакеты Python : Все приложения Python могут состоять из пакетов.В основном это просто каталоги, содержащие файл __init__.py.

Как python находит пакеты : Ну, python может делать одну из двух вещей, когда ищет пакеты:

  • Если текущий каталог является пакетом, то есть содержит __init__.py, он может импортировать из файлов в нем.
  • Он может выполнять поиск по пути python (PYTHONPATH переменная окружения или sys.path -то же самое) и затем в подпакеты.

Как выкладываются проекты django : Проект django по умолчанию выглядит примерно так:

project_folder/
    __init__.py
    settings.py      # config
    urls.py          # url config
    polls/
        __init__.py  # makes polls a package
        models.py    # models
        admin.py     # admin
        views.py     # app views
        forms.py     # per app forms
        urls.py      # per app urls

В этом макете есть две возможности для вашего admin.py, когда вы runserver:

  • from models import Poll - это работает, потому что вы остаетесь в рамках своего пакета.
  • from polls.models import Poll - работает, потому что polls - это пакет и родитель, с которого вы запускаете runserver.

Хотя это заманчиво, не используйте project_folder какупаковка.Он сломает код, как только вы переименуете dir (например, во время развертывания).

Итак, имея в виду:

  • проверьте ваши __init__.py файлысуществуют в нужных местах, и вы используете структуру каталогов, подобную приведенной выше.Возможно, лучше проверить и за пределами IDE - IDE могут быть ... сложными.
  • убедитесь, что ваш путь поиска там, где вы думаете.Текущий каталог должен работать просто отлично;если это не так, вы можете увидеть, что

    import sys
    print sys.path
    

    позволит вам увидеть, куда вы смотрите.Вы можете явно добавить текущий каталог, но вам это не нужно.

  • Мне не нравится PyDev.Абсолютно личное предпочтение здесь, но я нахожу это тяжелой работой, сверх обычного редактора выбора + терминал + файловый браузер.Вы тоже можете, особенно если обнаружите, что структура каталогов в вашем файловом браузере радикально отличается от той, что, по вашему мнению, у вас есть в IDE.
1 голос
/ 23 января 2012

Вы используете Pydev, который добавляет дополнительный уровень абстракции в процесс импорта.

Используйте легкий текстовый редактор и консоль для обучения. Вы можете переключиться на IDE, как только Python Path и логика импорта будут достаточно ясны в вашей голове, чтобы вы могли сами настроить Pydev.

0 голосов
/ 09 марта 2012

попробуйте это:

import newProj.poll.models
0 голосов
/ 23 января 2012

Являются ли ошибки причиной того, что я не вижу страницу администрирования сайта, обновленную с помощью приложения Опросы?

Ответ на этот вопрос находится на той же странице, в https://docs.djangoproject.com/en/1.3/intro/tutorial02/#customize-the-admin-form

...