Python – Understanding python imports


In the process of learning Django and Python. I can't make sense of this.

(Example Notes:'helloworld' is the name of my project. It has 1 app called 'app'.)

from helloworld.views import *          # <<-- this works
from helloworld import views            # <<-- this doesn't work
from import views        # <<-- but this works.  why?

It seems like line #2 and #3 are practically the same. Why does like #2 not work?

Edit — Added the source of the two files.
You might recognize this code from the Django Book project (


from django.shortcuts import render_to_response
from django.http import HttpResponse, Http404
import datetime

def hello(request):
    return HttpResponse("Hello world")

def current_datetime(request):
    current_date =
    return render_to_response('current_datetime.html', locals())

def offset_datetime(request, offset):
        offset = int(offset)
    except ValueError:
        raise Http404()

    next_time = + datetime.timedelta(hours=offset)
    return render_to_response('offset_datetime.html', locals())

def display_meta(request):
    values = request.META.items()
    path = request.path
    return render_to_response('metavalues.html', locals())


from django.shortcuts import render_to_response

def search_form(request):
    return render_to_response('search_form.html')

def search(request):
    if 'q' in request.GET:
        message = 'You searched for: %r' % request.GET['q']
        message = 'You searched for nothing.'

    return render_to_response('search_results.html', locals())

Best Solution

Python imports can import two different kinds of things: modules and objects.

import x

Imports an entire module named x.

import x.y

Imports a module named y and it's container x. You refer to x.y.

When you created it, however, you created this directory structure


When you add to the import statement, you identify specific objects to pull from the module and move into the global namespace

import x # the module as a whole
x.a # Must pick items out of the module

from x import a, b # two things lifted out of the module
a # items are global

If helloworld is a package (a directory, with an file), it typically doesn't contain any objects.

from x import y # isn't sensible
import x.y # importing a whole module.

Sometimes, you will have objects defined in the file.

Generally, use "from module import x" to pick specific objects out of a module.

Use import module to import an entire module.