r'^(?P <pk> \ d +)$ URL 404ing

时间:2016-09-14 03:24:15

标签: django django-urls

我正在尝试使用此链接<a href="Annotation/{{ vod.id }}">在我的网站中根据视频的主键加载另一个页面。我的网址文件如下:

urlpatterns = [
    url(r'^$', ListView.as_view(queryset=Vod.objects.all().order_by("-date")[:25], template_name="Annotation/home.html")),

    url(r'^(?P<pk>\d+)$', ListView.as_view(queryset=Vod.objects.get(pk=1).posts.all().order_by("-date"), template_name="Annotation/post.html")),
]

我从使用上述链接生成的链接中获取标准404。

谢谢!

编辑:添加了基本网址

url(r'^admin/', admin.site.urls),
url(r'^Annotation', include('Annotation.urls')),
url(r'^Profile', include('Profile.urls')),

这是Profile.urls的网址

url(r'^$', views.index, name='index'),

edit2:更改了网址并添加了我正在尝试使用的视图。

url(r'^(?P<key>[0-9]+)$', views.post, name="post")

这是views.post

def post(request, key):
try:
    target_vod = Vod.objects.get(pk=key)
except Target.DoesNotExist:
    raise Http404("Vod does not exist")
target_posts = Vod.objects.get(pk=key).posts.all().order_by("-date")
context = {'target_vod': target_vod, 'target_posts': target_posts}
return render(request, 'Annotation/post.html', context)

1 个答案:

答案 0 :(得分:0)

我已将代码分开并将其放入views.py中。这应该有用。

urls.py

url(r'^(?P<pk>[0-9]+)$', AnnoList.as_view(), template_name="Annotation/post.html")),

然后在views.py中:

class AnnoList(ListView):

    template_name = 'Annotation/post.html'

    def get_queryset(self):
        self.vod = get_object_or_404(Vod, pk=self.args[0])
        return Posts.objects.filter(vod=self.vod).all().order_by("-date")

我在这里假设您有两个不同的表,而且Posts有一个Vod的外键。