在 Django 中传递连字符 url

pass hypen in django url

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

这是我的URL

/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')

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

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

如评论中所述,您的错误与正则表达式无关,如果是这种情况,它将 return NoReverseMatch。您可以通过将 url 指向另一个有效的视图,或者将视图 return 的模板文件更改为有效的模板来轻松证明这一点。

我想你真的没有为每个可能的条目准备不同的 html 模板文件

'blog_pages/articles/entry-n.html'

更可能的是,您只有一个 html 模板,所有条目都应使用该模板,因此您应该引用该模板

'blog_pages/articles/entry.html'

我使用这个正则表达式解决了我的问题

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