#30538: Inconsistent slug generation behaviour of slugify() and prepopulated
fields
in Django Admin
-+-
Reporter: | Owner: nobody
nomenklature |
Type: | Status: new
Uncategorized |
Component: |Version: 2.2
Uncategorized | Keywords: slugify
Severity: Normal | prepopulated fields
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 |Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-+-
Hi everyone. I wanted to highlight an inconsistent slug generation
behaviour that I noticed.
So, for generating slugs, there are two ways I can go about doing it. One
way is by using the
[https://github.com/django/django/blob/dffa3e1992562ba60512d96d1eb58592ceb5/django/utils/text.py#L393
django.utils.text.slugify()] function to create a slug. This behaviour
allows us to create a default for a model field by modifying the save()
function, etc. Another way, if you are using Model Admin, is by using the
[https://docs.djangoproject.com/en/2.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.prepopulated_fields
prepopulated_fields] to generate a slug. The relevant javascript function
seems to be found
[https://github.com/django/django/blob/dffa3e1992562ba60512d96d1eb58592ceb5/django/contrib/admin/static/admin/js/urlify.js#L161
here].
Interestingly, and pretty obviously after viewing the differences between
the two codes, they result in slightly different slugs. For a string like
`How To Maintain Coke Diet` will have the following inconsistencies:
Via
[https://github.com/django/django/blob/dffa3e1992562ba60512d96d1eb58592ceb5/django/utils/text.py#L393
django.utils.text.slugify()]: `how-to-maintain-coke-diet`
Via prepopulated_fields: `how-maintain-coke-diet`
On closer analysis, it seems that this was the case because of the
following code in
[https://github.com/django/django/blob/dffa3e1992562ba60512d96d1eb58592ceb5/django/contrib/admin/static/admin/js/urlify.js#L161
django/contrib/admin/static/admin/js/urlify.js]:
{{{
// Remove English words only if the string contains ASCII
(English)
// characters.
if (!hasUnicodeChars) {
var removeList = [
"a", "an", "as", "at", "before", "but", "by", "for",
"from",
"is", "in", "into", "like", "of", "off", "on", "onto",
"per",
"since", "than", "the", "this", "that", "to", "up", "via",
"with"
];
var r = new RegExp('\\b(' + removeList.join('|') + ')\\b',
'gi');
s = s.replace(r, '');
}
}}}
With that, I recognise that there may be reasons accounting for the
inconsistencies. One could also argue that I can just stick to using the
[https://github.com/django/django/blob/dffa3e1992562ba60512d96d1eb58592ceb5/django/utils/text.py#L393
django.utils.text.slugify()] function, but I value the ability to
prepopulate slug fields from Django Admin (of course with a more
standardised behaviour).
Perhaps someone can weigh in on this and see if we can or should
standardise the implementation of both?
--
Ticket URL: <https://code.djangoproject.com/ticket/30538>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/055.855864dbd900ca09800ca8f5c15facb7%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.