title: About Python Flask "BuildError: Could not build url for endpoint 'index'. Did you mean 'main.index' instead?"
body: <p>In my limited experience with Python programing and I am searching for a long time on net. But no use. Please help or try to give some ideas how to achieve this.</p>
  
  <p>The error messages:</p>
  
  <pre><code>Traceback (most recent call last):
    File "G:\Flask\Sample\venv\lib\site-packages\tornado\web.py", line 1488, in _execute
      result = self.prepare()
    File "G:\Flask\Sample\venv\lib\site-packages\tornado\web.py", line 2774, in prepare
      self.fallback(self.request)
    File "G:\Flask\Sample\venv\lib\site-packages\livereload\server.py", line 89, in __call__
      WSGIContainer.environ(request), start_response)
    File "G:\Flask\Sample\venv\lib\site-packages\flask\app.py", line 1985, in wsgi_app
      response = self.handle_exception(e)
    File "G:\Flask\Sample\venv\lib\site-packages\flask\app.py", line 1540, in handle_exception
      reraise(exc_type, exc_value, tb)
    File "G:\Flask\Sample\venv\lib\site-packages\flask\app.py", line 1982, in wsgi_app
      response = self.full_dispatch_request()
    File "G:\Flask\Sample\venv\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
      rv = self.handle_user_exception(e)
    File "G:\Flask\Sample\venv\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
      reraise(exc_type, exc_value, tb)
    File "G:\Flask\Sample\venv\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
      rv = self.dispatch_request()
    File "G:\Flask\Sample\venv\lib\site-packages\flask\app.py", line 1598, in dispatch_request
      return self.view_functions[rule.endpoint](**req.view_args)
    File "G:\Flask\Sample\app\main\views.py", line 7, in index
      return render_template('index.html', title='Welcome')
    File "G:\Flask\Sample\venv\lib\site-packages\flask\templating.py", line 134, in render_template
      context, ctx.app)
    File "G:\Flask\Sample\venv\lib\site-packages\flask\templating.py", line 116, in _render
      rv = template.render(context)
    File "G:\Flask\Sample\venv\lib\site-packages\jinja2\environment.py", line 1008, in render
      return self.environment.handle_exception(exc_info, True)
    File "G:\Flask\Sample\venv\lib\site-packages\jinja2\environment.py", line 780, in handle_exception
      reraise(exc_type, exc_value, tb)
    File "G:\Flask\Sample\app\templates\index.html", line 2, in top-level template code
      {% import '_macro.html' as ma %}
    File "G:\Flask\Sample\app\templates\base.html", line 1, in top-level template code
      {% extends 'bootstrap/base.html' %}
    File "G:\Flask\Sample\venv\lib\site-packages\flask_bootstrap\templates\bootstrap\base.html", line 1, in top-level template code
      {% block doc -%}
    File "G:\Flask\Sample\venv\lib\site-packages\flask_bootstrap\templates\bootstrap\base.html", line 4, in block "doc"
      {%- block html %}
    File "G:\Flask\Sample\venv\lib\site-packages\flask_bootstrap\templates\bootstrap\base.html", line 20, in block "html"
      {% block body -%}
    File "G:\Flask\Sample\venv\lib\site-packages\flask_bootstrap\templates\bootstrap\base.html", line 21, in block "body"
      {% block navbar %}
    File "G:\Flask\Sample\app\templates\base.html", line 13, in block "navbar"
      {{ nav.top.render() }}
    File "G:\Flask\Sample\venv\lib\site-packages\flask_nav\elements.py", line 24, in render
      self))
    File "G:\Flask\Sample\venv\lib\site-packages\visitor\__init__.py", line 48, in visit
      return meth(node)
    File "G:\Flask\Sample\venv\lib\site-packages\flask_bootstrap\nav.py", line 53, in visit_Navbar
      bar_list.add(self.visit(item))
    File "G:\Flask\Sample\venv\lib\site-packages\visitor\__init__.py", line 48, in visit
      return meth(node)
    File "G:\Flask\Sample\venv\lib\site-packages\flask_bootstrap\nav.py", line 98, in visit_View
      item.add(tags.a(node.text, href=node.get_url(), title=node.text))
    File "G:\Flask\Sample\venv\lib\site-packages\flask_nav\elements.py", line 77, in get_url
      return url_for(self.endpoint, **self.url_for_kwargs)
    File "G:\Flask\Sample\venv\lib\site-packages\flask\helpers.py", line 333, in url_for
      return appctx.app.handle_url_build_error(error, endpoint, values)
    File "G:\Flask\Sample\venv\lib\site-packages\flask\app.py", line 1805, in handle_url_build_error
      reraise(exc_type, exc_value, tb)
    File "G:\Flask\Sample\venv\lib\site-packages\flask\helpers.py", line 323, in url_for
      force_external=external)
    File "G:\Flask\Sample\venv\lib\site-packages\werkzeug\routing.py", line 1768, in build
      raise BuildError(endpoint, values, method, self)
  BuildError: Could not build url for endpoint 'index'. Did you mean 'main.index' instead?
  </code></pre>
  
  <p>This is the directory layout of my project:</p>
  
  <pre><code>/Sample
      /app
          /auth
              /__init__.py
              /forms.py
              /views.py
          /main
              /__init__.py
              /views.py
          /templates
              /index.html
              /base.html
              /login.html
          /__init__.py
          /models.py
     /manager.py
     /venv
  </code></pre>
  
  <p>I think my problem is in /main/views.py but I can't find it .</p>
  
  <p>/main/views.py:</p>
  
  <pre><code>from flask import render_template, request, redirect, url_for, make_response, flash
  from . import main
  
  @main.route('/')
  def index():
      return render_template('index.html', title='Welcome')
  
  @main.route('/services')
  def services():
      return render_template('index.html', title='services')
  
  @main.route('/about')
  def about():
      return render_template('index.html', title='about')
  
  @main.route('/user/&lt;regex("[a-z]{3}"):user_id&gt;')
  def user(user_id):
      return 'User %s' % user_id
  
  @main.route('/work/')
  def projects():
      return render_template('index.html', title='projects')
  
  @main.errorhandler(404)
  def page_not_found(error):
      return render_template('404.html'), 404
  
  # @main.template_test('current_link')
  # def current_link(link):
  #     return link == request.path
  
  
  def read_md(filename):
      with open(filename) as md_file:
          content = reduce(lambda x, y: x + y, md_file.readline())
      return content.decode('utf-8')
  
  @main.context_processor
  def inject_methods():
      return dict(read_md=read_md)
  </code></pre>
  
  <p>/main/<strong>init</strong>.py:</p>
  
  <pre><code>from flask import Blueprint
  
  main = Blueprint('main', __name__)
  
  from . import views
  </code></pre>
  
  <p>/app/<strong>init</strong>.py:</p>
  
  <pre><code>from os import path
  from flask import Flask
  from flask_bootstrap import Bootstrap
  from flask_nav import Nav
  from flask_nav.elements import *
  from flask_sqlalchemy import SQLAlchemy
  from werkzeug.routing import BaseConverter
  
  class RegexConverter(BaseConverter):
      def __init__(self, url_map, *items):
          super(RegexConverter, self).__init__(url_map)
          self.regex = items[0]
  
  basedir =  path.abspath(path.dirname(__file__))
  
  bootstrap = Bootstrap()
  #app.config['BOOTSTRAP_SERVE_LOCAL'] = True
  db = SQLAlchemy()
  nav = Nav()
  
  def create_app():
      app = Flask(__name__)
      app.url_map.converters['regex'] = RegexConverter
      app.config.from_pyfile('config')
      app.config['DEBUG'] = True
      app.config['SQLALCHEMY_DATABASE_URI'] = \
          'sqlite:///' + path.join(basedir, 'data.sqlite')
      app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
      nav.register_element('top', Navbar('Flask',
                                          View('Index', 'index'),
                                          View('About', 'about'),
                                          View('Services', 'services'),
                                          View('Projects', 'projects')))
      nav.init_app(app)
      bootstrap.init_app(app)
      db.init_app(app)
  
      from .auth import auth as auth_blueprint
      from .main import main as main_blueprint
  
      app.register_blueprint(auth_blueprint)
      app.register_blueprint(main_blueprint)
  
      return app
  </code></pre>