Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: from django.urls import reverse; ImportError: No module named urls [duplicate]

I am working through the DjangoProject tutorial with the polls app. As the tutorial states in part 4 I am trying to import 'reverse': from django.urls import reverse but getting the error:

from django.urls import reverse ImportError: No module named urls

I have changed the ROOT_URLCONF to just 'urls', however, it did not work either.

Any help is appreciated, Thank you.

settings.py

import os  # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))   # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/  # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '3jyaq2i8aii-0m=fqm#7h&ri2+!7x3-x2t(yv1jutwa9kc)t!e'  # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True  ALLOWED_HOSTS = []   # Application definition  INSTALLED_APPS = [     'polls.apps.PollsConfig',     'django.contrib.admin',     'django.contrib.auth',     'django.contrib.contenttypes',     'django.contrib.sessions',     'django.contrib.messages',     'django.contrib.staticfiles', ]  MIDDLEWARE_CLASSES = [     'django.middleware.security.SecurityMiddleware',     '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', ]  ROOT_URLCONF = 'mysite.urls'  TEMPLATES = [     {         'BACKEND': 'django.template.backends.django.DjangoTemplates',         'DIRS': [],         'APP_DIRS': True,         'OPTIONS': {             'context_processors': [                 'django.template.context_processors.debug',                 'django.template.context_processors.request',                 'django.contrib.auth.context_processors.auth',                 'django.contrib.messages.context_processors.messages',             ],         },     }, ]  WSGI_APPLICATION = 'mysite.wsgi.application'   # Database # https://docs.djangoproject.com/en/1.9/ref/settings/#databases  DATABASES = {     'default': {         'ENGINE': 'django.db.backends.sqlite3',         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),     } }   # Password validation # https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators  AUTH_PASSWORD_VALIDATORS = [     {         'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',     },     {         'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',     },     {         'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',     },     {         'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',     }, ]   # Internationalization # https://docs.djangoproject.com/en/1.9/topics/i18n/  LANGUAGE_CODE = 'en-us'  TIME_ZONE = 'UTC'  USE_I18N = True  USE_L10N = True  USE_TZ = True   # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.9/howto/static-files/  STATIC_URL = '/static/' 

urls.py

from django.conf.urls import url, include from django.contrib import admin  urlpatterns = [     url(r'^admin/', admin.site.urls),     url(r'^polls/', include('polls.urls')),  ] 

polls/views.py

from django.http import HttpResponse, HttpResponseRedirect from .models import Question, Choice from django.shortcuts import get_object_or_404, render from django.urls import reverse   def index(request):     latest_question_list = Question.objects.order_by('-pub_date')[:5]     context = {         'latest_question_list': latest_question_list,         }     return render(request, 'polls/index.html', context)   def detail(request, question_id):     question = get_object_or_404(Question, pk=question_id)     return render(request, 'polls/results.html', {'question' : question})   def results(request, questioin_id):     response = "you are looking at the results of question %s"     return HttpResponse(response % question_id)  def vote(request, question_id):     question = get_object_or_404(Question, pk=questioin_id)     try:         selected_choice = question.choice_set.get(pk=request.POST['choice'])     except (KeyError, Choice.DoesNotExist):         return render(request, 'polls/detail.html', {'question': question,                                                       'error_message': "you didnt select a choice",                                                       })     else:         selected_choice.votes += 1         selected_choice.save()         return HttpResponseRedirect(reverse('polls:results', args=                                             (question.id,))) 

polls/urls.py

from django.conf.urls import url from . import views  app_name = 'polls'  urlpatterns = [     url(r'^$', views.index, name='index'),     url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),     url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'),     url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),  ] 
like image 805
salty_coffee Avatar asked Aug 14 '16 16:08

salty_coffee


1 Answers

You're on Django 1.9, you should do:

from django.core.urlresolvers import reverse 

Starting with version 1.10 (including Django 2.0) is where you get to do from django.urls import reverse

like image 178
Moses Koledoye Avatar answered Oct 11 '22 12:10

Moses Koledoye