diff --git a/reviewboard/reviews/datagrids.py b/reviewboard/reviews/datagrids.py
index 606c4fec863337f0f9d60b2b7260382c509ef764..d9c1984654edf6fcf6f8ea9433544db4a90ae40b 100644
--- a/reviewboard/reviews/datagrids.py
+++ b/reviewboard/reviews/datagrids.py
@@ -397,7 +397,7 @@ class GroupMemberCountColumn(Column):
         return six.text_type(group.users.count())
 
     def link_to_object(self, group, value):
-        return local_site_reverse('group_members',
+        return local_site_reverse('group-members',
                                   request=self.datagrid.request,
                                   args=[group.name])
 
diff --git a/reviewboard/reviews/models/review_request_draft.py b/reviewboard/reviews/models/review_request_draft.py
index 85e2b8828efe4c690d18d7161cbdbbf3795b3262..dd4069d8bddabcbddc859632c7f4b51b946d3f73 100644
--- a/reviewboard/reviews/models/review_request_draft.py
+++ b/reviewboard/reviews/models/review_request_draft.py
@@ -312,7 +312,7 @@ class ReviewRequestDraft(BaseReviewRequestDetails):
                     local_site_name = None
 
                 url = local_site_reverse(
-                    'view_diff_revision',
+                    'view-diff-revision',
                     local_site_name=local_site_name,
                     args=[review_request.display_id, self.diffset.revision])
                 self.changedesc.fields_changed['diff'] = {
diff --git a/reviewboard/reviews/ui/base.py b/reviewboard/reviews/ui/base.py
index 3b7742604f87ed734668e39136b6123460f32d77..d5fe455d7c4cc0fb5f7e3fad5099e955bb3e835a 100644
--- a/reviewboard/reviews/ui/base.py
+++ b/reviewboard/reviews/ui/base.py
@@ -154,7 +154,7 @@ class ReviewUI(object):
             local_site_name = self.review_request.local_site.name
 
         return local_site_reverse(
-            'file_attachment',
+            'file-attachment',
             local_site_name=local_site_name,
             kwargs={
                 'review_request_id': self.review_request.display_id,
diff --git a/reviewboard/reviews/urls.py b/reviewboard/reviews/urls.py
index d520572e0f2c34b7dbbc2910746f1b4b388b2061..99c31fe00b88fe8e0ea3c1ff22efc1c7b686eb4f 100644
--- a/reviewboard/reviews/urls.py
+++ b/reviewboard/reviews/urls.py
@@ -19,11 +19,11 @@ diffviewer_revision_urls = patterns(
 
     url(r'^$',
         ReviewsDiffViewerView.as_view(),
-        name="view_diff_revision"),
+        name="view-diff-revision"),
 
     url(r'^raw/$',
         'raw_diff',
-        name='raw_diff_revision'),
+        name='raw-diff-revision'),
 
     url(r'^fragment/(?P<filediff_id>[0-9]+)/$',
         ReviewsDiffFragmentView.as_view()),
@@ -39,7 +39,7 @@ diffviewer_interdiff_urls = patterns(
 
     url(r'^$',
         ReviewsDiffViewerView.as_view(),
-        name="view_interdiff"),
+        name="view-interdiff"),
 
     url(r'^fragment/(?P<filediff_id>[0-9]+)/$',
         ReviewsDiffFragmentView.as_view()),
@@ -51,8 +51,8 @@ diffviewer_interdiff_urls = patterns(
 diffviewer_urls = patterns(
     'reviewboard.reviews.views',
 
-    url(r'^$', ReviewsDiffViewerView.as_view(), name="view_diff"),
-    url(r'^raw/$', 'raw_diff', name='raw_diff'),
+    url(r'^$', ReviewsDiffViewerView.as_view(), name="view-diff"),
+    url(r'^raw/$', 'raw_diff', name='raw-diff'),
 
     url(r'^(?P<revision>[0-9]+)/', include(diffviewer_revision_urls)),
     url(r'^(?P<revision>[0-9]+)-(?P<interdiff_revision>[0-9]+)/',
@@ -75,7 +75,7 @@ review_request_urls = patterns(
     # File attachments
     url(r'^file/(?P<file_attachment_id>[0-9]+)/$',
         'review_file_attachment',
-        name='file_attachment'),
+        name='file-attachment'),
 
     # Screenshots
     url(r'^s/(?P<screenshot_id>[0-9]+)/$',
diff --git a/reviewboard/templates/diffviewer/diff_file_fragment.html b/reviewboard/templates/diffviewer/diff_file_fragment.html
index aeb22fa329361d5517c60166f641357293a6feeb..3641b0ee914f2703df7180ff40d0220684e1fb2f 100644
--- a/reviewboard/templates/diffviewer/diff_file_fragment.html
+++ b/reviewboard/templates/diffviewer/diff_file_fragment.html
@@ -127,7 +127,7 @@
 {%   if modified_diff_file_attachment %}
 {%    if not modified_attachment_review_ui_html and not diff_attachment_review_ui_html %}
 {%     if modified_diff_file_attachment.review_ui %}
-      <li class="file-review"><a href="{% url 'file_attachment' modified_diff_file_attachment.get_review_request.display_id modified_diff_file_attachment.pk %}">{% trans "Review" %}</a></li>
+      <li class="file-review"><a href="{% url 'file-attachment' modified_diff_file_attachment.get_review_request.display_id modified_diff_file_attachment.pk %}">{% trans "Review" %}</a></li>
 {%     else %}
       <li class="file-add-comment"><a href="#">{% trans "New Comment" %}</a></li>
 {%     endif %}
diff --git a/reviewboard/templates/notifications/review_request_email.html b/reviewboard/templates/notifications/review_request_email.html
index ece1131961f492dcb73d158484f4d2edad4fb655..49bc504b6ad5a48b6ea6ca8f6de28c6796b76e6c 100644
--- a/reviewboard/templates/notifications/review_request_email.html
+++ b/reviewboard/templates/notifications/review_request_email.html
@@ -94,7 +94,7 @@
 {% endfor %}
 </ul>
 
-<p><a href="{{domain_method}}://{{domain}}{% url 'view_diff' review_request.display_id %}" style="margin-left: 3em;">View Diff</a></p>
+<p><a href="{{domain_method}}://{{domain}}{% url 'view-diff' review_request.display_id %}" style="margin-left: 3em;">View Diff</a></p>
 
 
 {%   if review_request.file_attachments.count %}
diff --git a/reviewboard/templates/notifications/review_request_email.txt b/reviewboard/templates/notifications/review_request_email.txt
index 11c83a13247aeb3871e62c7beea37c72c87a1d4d..1eaabb9ef25b1f4739d92f835fe2542a9f4a5408 100644
--- a/reviewboard/templates/notifications/review_request_email.txt
+++ b/reviewboard/templates/notifications/review_request_email.txt
@@ -54,7 +54,7 @@ Diffs{% if changes and changes.diff %} (updated){% endif %}
 {% for filediff in review_request.diffset_history.diffsets.latest.files.all %}
   {{ filediff.source_file_display }} {{ filediff.source_revision }} {% endfor %}
 
-Diff: {{domain_method}}://{{domain}}{% url 'view_diff' review_request.display_id %}
+Diff: {{domain_method}}://{{domain}}{% url 'view-diff' review_request.display_id %}
 
 
 Testing{% if changes and changes.testing_done %} (updated){% endif %}
diff --git a/reviewboard/templates/reviews/review_detail.html b/reviewboard/templates/reviews/review_detail.html
index 8102d9c702b9725d8eadbdba57901492e6381c7d..67c7658c62ad9716cadf4ddb17c8382c9f495fd2 100644
--- a/reviewboard/templates/reviews/review_detail.html
+++ b/reviewboard/templates/reviews/review_detail.html
@@ -227,7 +227,7 @@
 {%   definevar "added_values" %}
       <a href="{{fieldinfo.diff_url}}">{{fieldinfo.diff_label}}</a>
 {%    if fieldinfo.past_revision != 0 %}
-      - <a href="{% url 'view_interdiff' review_request.display_id fieldinfo.past_revision fieldinfo.current_revision %}">{% trans "Show changes" %}</a>
+      - <a href="{% url 'view-interdiff' review_request.display_id fieldinfo.past_revision fieldinfo.current_revision %}">{% trans "Show changes" %}</a>
 {%    endif %}
 {%   enddefinevar %}
      <ul>
diff --git a/reviewboard/templates/reviews/review_header.html b/reviewboard/templates/reviews/review_header.html
index 73452e5de0da7863abf8ff43aebe2ed33a93e690..4184e0a949a992b2c06e4f4e13840782786003be 100644
--- a/reviewboard/templates/reviews/review_header.html
+++ b/reviewboard/templates/reviews/review_header.html
@@ -44,7 +44,7 @@
   <pre id="field_changedescription" class="field field-text-area editable" data-rich-text="true" data-field-id="field_changedescription"></pre>
 {%    endif %}
 {%    if draft.diffset %}
-  <p>{% trans "This draft adds a new diff." %} <a href="{% url 'view_interdiff' review_request.display_id draft.diffset.revision|add:"-1" draft.diffset.revision %}">{% trans "Show changes" %}</a></p>
+  <p>{% trans "This draft adds a new diff." %} <a href="{% url 'view-interdiff' review_request.display_id draft.diffset.revision|add:"-1" draft.diffset.revision %}">{% trans "Show changes" %}</a></p>
 {%    endif %}
 {%   else %}
   <h1>{% trans "This review request is not yet public." %}</h1>
diff --git a/reviewboard/templates/reviews/review_request_box.html b/reviewboard/templates/reviews/review_request_box.html
index b2394c67831245af9d9250bd4d5a15856a59eb87..1c3e78abae81f422d999a146d455c0bf89e1264d 100644
--- a/reviewboard/templates/reviews/review_request_box.html
+++ b/reviewboard/templates/reviews/review_request_box.html
@@ -101,7 +101,7 @@
       <ul class="actions">
 {%  if request.user.is_authenticated %}
 {%   if file.review_ui %}
-       <li class="{% if file.review_ui.allow_inline %}file-review-inline %}{% else %}file-review{% endif %}"><a href="{% url 'file_attachment' review_request.display_id file.pk %}">{% trans "Review" %}</a></li>
+       <li class="{% if file.review_ui.allow_inline %}file-review-inline %}{% else %}file-review{% endif %}"><a href="{% url 'file-attachment' review_request.display_id file.pk %}">{% trans "Review" %}</a></li>
 {%   else %}
        <li class="file-add-comment"><a href="#">{% trans "New Comment" %}</a></li>
 {%   endif %}
@@ -122,7 +122,7 @@
       </div>
       <div class="file-thumbnail-container">
 {%  if file.review_ui %}
-       <a href="{% url 'file_attachment' review_request.display_id file.pk %}" class="file-thumbnail-overlay" alt="{% trans 'Click to review' %}" title="{% trans 'Click to review' %}"> </a>
+       <a href="{% url 'file-attachment' review_request.display_id file.pk %}" class="file-thumbnail-overlay" alt="{% trans 'Click to review' %}" title="{% trans 'Click to review' %}"> </a>
        {{file.thumbnail}}
 {%  else %}
        {{file.thumbnail}}
@@ -132,7 +132,7 @@
       <div class="file-caption-container">
        <div class="file-caption {% if request.user.pk == review_request.submitter_id or perms.reviews.delete_file %}can-edit{% endif %}">
 {%  definevar "caption" %}{% if draft %}{{file.draft_caption}}{% else %}{{file.caption}}{% endif %}{% enddefinevar %}
-{%  definevar "file_attachment_url" %}{% if file.review_ui %}{% url "file_attachment" review_request.display_id file.pk %}{% else %}{{file.get_absolute_url}}{% endif %}{% enddefinevar %}
+{%  definevar "file_attachment_url" %}{% if file.review_ui %}{% url "file-attachment" review_request.display_id file.pk %}{% else %}{{file.get_absolute_url}}{% endif %}{% enddefinevar %}
 {%  if caption %}
         <a href="{{file_attachment_url}}" class="edit">{{caption}}</a>
 {%  else %}
diff --git a/reviewboard/templates/reviews/ui/base.html b/reviewboard/templates/reviews/ui/base.html
index fd3193f67675408f3af4b647ad1518d250f2beea..5ee060526a43859019f12634c93e5181aab5e5a5 100644
--- a/reviewboard/templates/reviews/ui/base.html
+++ b/reviewboard/templates/reviews/ui/base.html
@@ -20,7 +20,7 @@
  <ul class="actions">
 {%   include "reviews/review_request_actions_secondary.html" %}
 {%   if has_diffs %}
-  <li class="primary"><a href="{% url 'raw_diff' review_request.display_id %}">{% trans "Download Diff" %}</a></li>
+  <li class="primary"><a href="{% url 'raw-diff' review_request.display_id %}">{% trans "Download Diff" %}</a></li>
 {%   endif %}
 {%   include "reviews/review_request_actions_primary.html" %}
   <li class="primary"><a href="{{review_request.get_absolute_url}}">{% trans "View Reviews" %}</a></li>
diff --git a/reviewboard/urls.py b/reviewboard/urls.py
index 623547fbba843b6bbb1c54010c184b7cc0cf28c9..ec17bce54d5e81bc8fe0dbbec6dd659bb7fb9cfb 100644
--- a/reviewboard/urls.py
+++ b/reviewboard/urls.py
@@ -19,6 +19,24 @@ handler404 = 'django.views.defaults.page_not_found'
 handler500 = 'django.views.defaults.server_error'
 
 
+# Useful collections of URL names that may be interesting to callers.
+# This is especially useful for any apply_to lists in hooks.
+diffviewer_url_names = [
+    'view-diff',
+    'view-interdiff',
+    'view-diff-revision',
+]
+
+reviewable_url_names = diffviewer_url_names + [
+    'file-attachment',
+    'screenshot',
+]
+
+review_request_url_names = diffviewer_url_names + [
+    'review-request-detail',
+]
+
+
 # Load in all the models for the admin UI.
 if not admin.site._registry:
     admin.autodiscover()
@@ -86,7 +104,7 @@ localsite_urlpatterns = patterns(
     url(r'^groups/(?P<name>[A-Za-z0-9_-]+)/$',
         'reviewboard.reviews.views.group', name="group"),
     url(r'^groups/(?P<name>[A-Za-z0-9_-]+)/members/$',
-        'reviewboard.reviews.views.group_members', name="group_members"),
+        'reviewboard.reviews.views.group_members', name="group-members"),
 )
 
 
diff --git a/reviewboard/webapi/resources/base_file_attachment.py b/reviewboard/webapi/resources/base_file_attachment.py
index 088e86810c0d5a1915f3a772193f82e94085e976..2ea5fc19eff2cb9446ab488949485e6409e26faf 100644
--- a/reviewboard/webapi/resources/base_file_attachment.py
+++ b/reviewboard/webapi/resources/base_file_attachment.py
@@ -121,7 +121,7 @@ class BaseFileAttachmentResource(WebAPIResource):
                 local_site_name = None
 
             return local_site_reverse(
-                'file_attachment', local_site_name=local_site_name,
+                'file-attachment', local_site_name=local_site_name,
                 kwargs={
                     'review_request_id': review_request.display_id,
                     'file_attachment_id': obj.pk,
