【问题标题】:r'^(?P<pk>\d+)$ URL 404ingr'^(?P<pk>\d+)$ URL 404ing
【发布时间】:2017-01-21 18:19:46
【问题描述】:

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

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

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

这是 Profile.urls 的 URL

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

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

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)

【问题讨论】:

  • 请在包含这些 URL 的位置包含基本 urls.py。查看 URL 的堆叠方式很重要。
  • Annotation/id != /id,应该怎么匹配?​​
  • 好的,我也添加了基本 URL

标签: django django-urls


【解决方案1】:

我已将代码分离并放入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 的外键。

【讨论】:

  • 如果你看我的第二次编辑,我实现了类似的东西。但是,我仍然收到 404。
  • 尝试调试。在某些点实施“打印(键)”以查看问题所在。另外,该记录是否仍然可用?如果您的数据库中没有该 pk 的 Vod 记录,您将始终收到 404 错误。
猜你喜欢
  • 2018-04-25
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多