Opened 8 years ago

Last modified 4 years ago

#7537 new New feature

Make RegexURLResolver easier to subclass

Reported by: Kenneth Arnold Owned by: nobody
Component: Core (URLs) Version: master
Severity: Normal Keywords: url, urlpatterns, resolver
Cc: kenneth.arnold@…, eallik@… Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: yes Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Referencing the django-developers discussion, here's some simple patches to make the URL resolver easier to customize.

First is a nearly minimal patch to convert the url_patterns property to an accessor, get_url_patterns, to ease subclassing, and make the other methods use that consistently instead of duplicating its functionality. With only this patch you can make your own URL resolver without duplicating code, but it's still not clean.

The second patch cleans up the situation by abstracting the core functionality of a regex URL resolver into BaseRegexURLResolver.

The third patch is an example of how newforms-admin might use this for URL dispatching. I don't have a deep understanding about what's going on, so treat what I did just as an example. Perhaps the cleanest way to accomplish some of what the old ad-hoc resolver did is to override resolve, and if super().resolve returns None, do the ad-hoc stuff.

You'd use a custom resolver in your urlconf like this:

urlpatterns += [AdminSite(r'^admin/')]

i.e., like a normal include (at least, what that include looks like under the hood).

The newforms-admin change would be backwards-incompatible, so if people think it's a good idea, it should get a separate ticket.

About the accessor: properties don't inherit well. Could add a url_patterns = property(lambda self: self.get_url_patterns()) if that's not too ugly.

Attachments (3)

dj-urlresolver-patch2.patch (2.9 KB) - added by Kenneth Arnold 8 years ago.
Patch 2: extract base functionality
dj-nfa-urlresolver.diff (5.2 KB) - added by Kenneth Arnold 8 years ago.
Example nfa change (Example Only)
dj-urlresolver-patch1.patch (1.9 KB) - added by Kenneth Arnold 8 years ago.
nearly minimal patch

Download all attachments as: .zip

Change History (12)

Changed 8 years ago by Kenneth Arnold

Attachment: dj-urlresolver-patch2.patch added

Patch 2: extract base functionality

Changed 8 years ago by Kenneth Arnold

Attachment: dj-nfa-urlresolver.diff added

Example nfa change (Example Only)

comment:1 Changed 8 years ago by Alex Gaynor

Needs tests: set
Triage Stage: UnreviewedDesign decision needed

Changed 8 years ago by Kenneth Arnold

Attachment: dj-urlresolver-patch1.patch added

nearly minimal patch

comment:2 Changed 8 years ago by Kenneth Arnold

Cc: kenneth.arnold@… added

comment:3 Changed 8 years ago by Erik Allik

Cc: eallik@… added

comment:4 Changed 8 years ago by Erik Allik

Wouldn't this also solve the issue of not being able to reverse or {% url %} "into" the admin interface?

comment:5 Changed 8 years ago by Alex Gaynor

Yes, but so does #6470

comment:6 Changed 8 years ago by Erik Allik

I cannot see how. If #6470 was applied, would I be able to do {% url admin_edit_view mymodel %}?

comment:7 Changed 6 years ago by Luke Plant

Severity: Normal
Type: New feature

comment:8 Changed 5 years ago by Alex Gaynor

Easy pickings: unset
Triage Stage: Design decision neededAccepted
UI/UX: unset

me of a few years ago was silly, any way to better organize the code is a good idea.

comment:9 Changed 4 years ago by Aymeric Augustin

Component: Core (Other)Core (URLs)
Note: See TracTickets for help on using tickets.
Back to Top