2014-02-16 2 views
0

Я не знаю, правильная ли эта логика, Я пытаюсь импортировать представление Django в 2 разных представлениях. У меня есть цепь импорта, как это:Django views ImportError

a.views import b.views 
b.views import c.views 
c.views import d.views 

и

d.views import b.views 

но когда я достигаю последний шаг я получаю ImportError.

Если я поместил комментарий в d.views, избегая импорта b.views, он работает.

Я новичок в Django, может кто-нибудь мне помочь?

Если я использую в a.views и в d.views синтаксисе

from b.views import * 

это работает, но .. код не так читается.

Если я использую

from b.views import my_func 

это не работает!

Это ошибка из DJANGO оболочки:

>>> import maps.views 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/Users/save/sites/myblog/maps/views.py", line 19, in <module> 
    from places.views import * 
    File "/Users/save/sites/myblog/places/views.py", line 22, in <module> 
    from posts.views import * 
    File "/Users/save/sites/myblog/posts/views.py", line 31, in <module> 
    from maps.views import render_map_geoloc 
ImportError: cannot import name render_map_geoloc 
+0

Похоже, у вас есть круговое импорта где-то. Можете ли вы показать нам ошибку импорта (полная трассировка), пожалуйста? –

+0

зависимости render_map_geoloc не заполнены полностью. – Mutant

ответ

1

Его из-за циклической зависимости или циклической ссылки.

b depends on c 
c depends on d 
d depends on b #which depends on c 

Не знаете, для какой цели вы используете. Но вы делаете явный импорт этой функции и прямо вверх, где ее использовали.

Глядя на ошибку, которую вы получаете, возможно, из-за некоторой зависимости, ожидаемой для d, исходит из b, поэтому, если вы from b.views import *, она получает эту зависимость. Но если вы импортируете конкретное представление (my_func), его отсутствует в этой зависимости.

Некоторые другие подробности вы можете найти на SO ответить нить - Django App Dependency Cycle

+0

Хорошо, теперь понятно. Я нашел решение puttimg для render_map_geoloc в модуле python «utility», где у меня есть функция, называемая более чем одним представлением. Спасибо! – Save