If you try to start your server with the above code in place you'll
get a Cyclic load dependency exception. View A requires View B,
which requires View A, which requires View B, etc. etc. etc. ibdknox
"mentioned this problem"
recently on the noir mailing list.

Here's some code I threw together to address the problem, along with
two basic examples of the code being used:

Lines 1-39 contain the code needed for defining "central" routes. The
routes variable maps route names to their path. For the path, you
can write the exact same code that you would write for defpage, for
example [:get ["/user/:id" :id #"\d+"]].

url-for-r largely copies noir's url-for method, with the exception
that it expects a keyword and not a function in order to do its path
lookup. You'll need to use one of the keywords defined in the routes
map. For example, on line 54 you can see that we're using
:view-b/list to identify the route. If your path specification takes
variables, you specify them with a map just as you do with
url-for. For example, (url-for-r :users/show {:id id-var}).

view-ns, dashed, and slashed are merely helper methods that
probably belong in some utility namespace.

defpage-r is merely a wrapper around defpage. As you can see on
lines 51 and 66, you use it in almost the same way as you use
defpage, except that you don't specify the path.

Note that the naming isn't arbitrary. The keywords you choose for your
route map keys take for the format
view-namespace/function-name. view-namespace is the part of your
namespace which comes after views.. So if your namespace is
my-awesome-site.views.admin.books, the view namespace would be
admin.books. The below example illustrates this: