Opened 18 years ago
Closed 18 years ago
#3646 closed (fixed)
ABSOLUTE_URL_OVERRIDES docs are inconsistent with how they actually work
Reported by: | James Bennett | Owned by: | Jacob |
---|---|---|---|
Component: | Documentation | Version: | dev |
Severity: | Keywords: | ||
Cc: | nsteinmetz@… | Triage Stage: | Ready for checkin |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
The docs for the ABSOLUTE_URL_OVERRIDES
setting state that the keys in that dictionary should be of the form app_label.modelname
, with the model name capitalized, but the code in django/db/models/base.py
which curries get_absolute_url
looks for app_label.module_name
, and module_name
is normalized to lower-case by that point.
So, for example, the docs say to use weblog.Entry
as a key in ABSOLUTE_URL_OVERRIDES
, but get_absolute_url
will actually look for weblog.entry
.
I'm of two minds on how to solve this; the naive solution is to have the curried get_absolute_url
look for opts.module_name.capitalize()
, since that will make it consistent with the examples in the docs, but it's entirely possible that someone will create a model class with an all-lowercase name (which is, I assume, why module_name
is normalizing it to lowercase), in which case the better solution is to change the docs.
Attachments (1)
Change History (9)
comment:1 by , 18 years ago
Triage Stage: | Unreviewed → Design decision needed |
---|
comment:2 by , 18 years ago
Description: | modified (diff) |
---|
comment:3 by , 18 years ago
Description: | modified (diff) |
---|
comment:4 by , 18 years ago
comment:5 by , 18 years ago
Cc: | added |
---|
comment:6 by , 18 years ago
Triage Stage: | Design decision needed → Accepted |
---|
Of the two choices, we should prefer fixing the docs: use the lower-case version and point out that people must use the lower-case version.
The capitalize()
version won't work for a model called MyModel. Camel- case class names is pretty common in Python (even PEP-8 compatible).
The ideal solution would be a third option: take the key and lower-case it before comparing to the module_name. Then people can use the real Python import path in the settings file and not have to worry about Django's slightly odd "real men don't use capital letters" approach to lower-casing every name in sight. Can't immediately see how to do that in just a line or two in django. db.models.base.get_absolute_url()
, though.
comment:7 by , 18 years ago
Component: | Metasystem → Documentation |
---|---|
Owner: | changed from | to
Triage Stage: | Accepted → Ready for checkin |
comment:8 by , 18 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
(and in a wonderfully ironic twist of fate, this is partially my fault, because it was my documentation patch in #3226 which made the docs inconsistent with the actual code...)