在django url中传递hypen

时间:2016-03-18 06:19:19

标签: python regex django django-urls

我正在尝试在/ blog / *之后包含所有字符,包括连字符,并将它们传递给views.py中的函数。

这是我的网址

/blog/entry-id-01

我在urls.py

中有这个
urls(r'^blog/(?P<entry>[-\w]+)/$, blog_entry)

然而,当我加载我的页面时。我收到以下错误:

TemplateDoesNotExist at /blog/entry-id-01

我的例外值是:

blog_pages/articles/entry.html

有没有办法包括所有字符,包括连字符?

编辑:添加了view.py

def blog_entry (request, entry):
    return render( request, 'blog_pages/articles/'+entry+'.html')

3 个答案:

答案 0 :(得分:1)

匹配单词字符的正则表达式应为\w而不是/w,并且您还需要指定指定捕获组的名称。

url(r'^blog/(?P<id>[-\w]+)/$', blog_entry)
                 ^^   ^

答案 1 :(得分:0)

如评论中所述,您的错误与正则表达式无关,如果是这种情况,它将返回NoReverseMatch。您可以通过将URL指向可行的其他视图,或者通过更改视图返回到可用的模板的模板文件来轻松证明这一点。

我想你每个可能的条目都没有不同的html模板文件

'blog_pages/articles/entry-n.html'

并且您更有可能拥有一个所有条目都应该使用的单个html模板,因此您应该引用

'blog_pages/articles/entry.html'

答案 2 :(得分:0)

我通过使用此正则表达式修复了我的问题

(?P<entry>[^/]+)