Whats the correct way to use and refer to a slugfield in a django 1.3

后端 未结 4 890
日久生厌
日久生厌 2021-02-04 22:33

Whats the correct way to use and refer to a slugfield in a django 1.3

for example the following code should link via slug to a generic view however the NoReverseMatch er

相关标签:
4条回答
  • 2021-02-04 22:37

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

    (?P<slug>[\w-]+)
    
    0 讨论(0)
  • 2021-02-04 22:41

    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.

    0 讨论(0)
  • 2021-02-04 22:43

    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.

    0 讨论(0)
  • 2021-02-04 22:54

    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.

    0 讨论(0)
提交回复
热议问题