用于字母数字字符串的Django URL正则表达式

时间:2018-03-24 11:14:52

标签: python regex django python-3.x

我目前的网址格式为:

url(r'^(?P<category>\w+)/(?P<hash>\w+)/$', article, name='article'),

hash是一个字母数字字符串,可以是大写或小写。

示例:gqaBittXW9hcyO

我的网址格式应该是什么样的呢?

错误:

NoReverseMatch at /news/gqaBittXW9hcyO/
Reverse for 'article' with keyword arguments '{'id': 1, 'category': 'news'}' not found. 1 pattern(s) tried: ['(?P<category>\\w+)/(?P<hash>\\w+)/$']

视图

def article(request, category, hash, extra_context=None):

    name = resolve(request.path).kwargs['category']
    instance = get_object_or_404(Post, hash=hash, entered_category=name)
    print('Hash:', instance.hash) #prints correctly (gqaBittXW9hcyO)

    context = {
        'id': instance.id,
        'instance': instance,
    }

    return render(request, 'article.html', context)

1 个答案:

答案 0 :(得分:1)

错误表示您尝试使用参数article创建名为{'id': 1, 'category': 'news'}的网址(可能是您的模板)。但是,您定义它的方式是,无法使用article构建id网址,您需要hash

网址/news/gqaBittXW9hcyO/与此错误无关,但匹配正确。