如何在django中嵌入网址?例如,如果我有两个模型定义为
class Post(models.Model):
title = models.CharField(max_length=50)
body = models.TextField()
created = models.DateTimeField(auto_now_add=True, editable=False)
def __unicode__(self):
return self.title
@property
def comments(self):
return self.comment_set.all()
class Comment(models.Model):
comment = models.TextField()
post = models.ForeignKey(Post)
created = models.DateTimeField(auto_now_add=True)
使用以下网址文件
root url
urlpatterns = patterns('',
url(r'^post/', include('post.urls')),
)
发布网址
urlpatterns = patterns('',
url(r'^$', views.PostList.as_view()),
url(r'^(?P<pk>[0-9]+)/$', views.PostDetail.as_view()),
url(r'^(?P<pk>[0-9]+)/comments/$', include('comment.urls')),
)
评论网址
urlpatterns = patterns('',
url(r'^$', CommentList.as_view()),
url(r'^(?P<pk>[0-9]+)/$', CommentDetail.as_view()),
)
但是当我去/ post / 2 / comments / 1时,我收到一个页面未找到错误说明
Using the URLconf defined in advanced_rest.urls, Django tried these URL patterns, in this order:
^post/ ^$
^post/ ^(?P<pk>[0-9]+)/$
^post/ ^(?P<pk>[0-9]+)/comments/$
The current URL, post/2/comments/1, didn't match any of these.
这不是问题,但是当我访问/ post / 2 / comments时django不允许这样的嵌套URL调用吗?
答案 0 :(得分:11)
我认为可能是因为你用美元符号$
完成了正则表达式。试试这条没有美元符号的行:
...
url(r'^(?P<pk>[0-9]+)/comments/', include('comment.urls')),
...
希望它有所帮助!
答案 1 :(得分:6)
$
结尾处有r'^(?P<pk>[0-9]+)/comments/$'
。
这意味着Django只会在之后没有任何内容时匹配该URL。
因此,目前不再考虑任何更长的网址。因此,您需要将正则表达式更新为:
url(r'^(?P<pk>[0-9]+)/comments/', include('comment.urls')),
答案 2 :(得分:0)
在Django 2.0之上,您可以简单地使用...
urlpatterns = [
path('<pk>/comments/', include('comment.urls')),
]