[Django]-Whats the correct way to use and refer to a slugfield in a django 1.3

7👍

Your regex doesn’t allow for numeric values. Try:

(?P<slug>[\w-]+)

2👍

In your template, assuming post is an instance of your model:

{% url single_post post.slug %}

Your url regex should look like the following:

url(r'^post/(?P<slug>[\w-]+)/$', ...

To test the above regex, try to access a few posts directly in your browser with a variety of valid slugs and see if they works. Once this is done, start testing the url names.

2👍

A slug value can contain any a-z, A-Z, 0-9, _ and -. The first 3 are represented by the special character w and since - itself is a special character, we need to use represent them both using a backslash \. So the correct expression becomes

url(r'^post/(?P<slug>[\w\-]+)/$', ...

At least this is what is working in my case.

👤Sachin

2👍

In Django 1.5 the slug validator uses this regex:

slug_re = re.compile(r'^[-a-zA-Z0-9_]+$')

See https://github.com/django/django/blob/stable/1.5.x/django/core/validators.py#L106

You can use this regex in urls.py:

url(r'^post/(?P<slug>[-a-zA-Z0-9_]+)/$', ...

In earlier versions it was [-\w]+ but I guess in Python3 \w matches non ascii characters like umlauts.

Leave a comment