Why is there a great need to change this. We do what Python at does at the moment, which isn't unreasonable. This is an edge-case and whilst it doesn't necessarily do what you personally expect, it isn't de-facto wrong (normal written text won't have a semi-colon without a space following it).

So, what is the use-case that doesn't work without this change being made?

​The str.title() documentation says the method should "return a titlecased version of the string: words start with uppercase characters, all remaining cased characters are lowercase." If you speak strictly in regular expression terms, that's exactly what it's doing; but it's clearly not the intent.

With this post being my first foray into the Django community, I don't know what SOP is when Python appears to be broken. But it does seem sensible to accept the patch, so that title-casing works as expected for Django template authors.

(Related Python bug report: ​Issue 995422: title case bug — strangely rejected four years ago on the basis that "capitalization conventions vary from language to language," accompanied by an example from French... whose capitalization conventions are the same as ours. Might be worth trying to re-open the issue.)

Replying to hdevries:
There's also another side effect here: string.capwords() uses split(), which means that runs of multiple spaces will get converted to one space. That likely won't be a problem for most, as HTML tends not to care about such things, but it's not backwards-compatible.

(There's some specific code to handle the apostrophe, and it appears in the patches uploaded above, which means it already existed when this ticket was opened.)

Absent a sufficiently convincing use case to break backwards compatibility, and given the lack of interest for this ticket over the last three years, I think we'd better keep the current implementation and I'm going to close this ticket.