我收到此错误找不到'video_detail'的反向参数'('',)'。尝试了1种模式:['video /(?P [-a-zA-Z0-9 _] +)/ $']。请帮忙。
#urls.py
urlpatterns = [
path('video/<slug:slug>/', views.VideoDetail.as_view(), name='video_detail'),
]
#views.py
class VideoDetail(DetailView):
model = Video
template_name = 'video.html'
# index.html
<a href="{% url 'video_detail' video.slug %}">
#models.py
class Video(models.Model):
title = models.CharField(max_length=100, unique=True)
slug = models.SlugField(max_length=200, unique=True)
year = models.CharField(max_length=4)
category = models.CharField(max_length=3)
genres = models.CharField(max_length=100)
poster = models.URLField(default='')
plot = models.CharField(max_length=500)
trailer = models.URLField(default='')
def __str__(self):
return self.title
def get_absolute_url(self):
from django.urls import reverse
return reverse("video.html", kwargs={"slug": str(self.slug)})
#urls.py主站点
urlpatterns = [
path("admin/", admin.site.urls),
path("", include("accounts.urls")),
path("", include("blog.urls")),
path("", include("video.urls")),
]
#views.py呈现index.html
class HomePage(TemplateView):
template_name = 'index.html'
答案 0 :(得分:0)
使用-
<a href="{% url 'video_detail' slug=video.slug %}">
确保video
是您正在使用的模型对象,否则它什么也不会给出,并且会出现url错误。
答案 1 :(得分:0)
您已在索引模板<a href="{% url 'video_detail' video.slug %}">
中放置了一个链接。但是在HomePage
视图中,您不会在任何地方设置video
。这意味着video.slug
的计算结果为空字符串''
,它说明了错误消息的with arguments '('',)'
部分。
您可以通过将video.slug
更改为要链接的视频的名称来解决此问题,例如
<a href="{% url 'video_detail' 'name-of-title' %}">
如果要在模板中使用video.slug
而不是'name-of-title'
,则需要将video
添加到模板上下文中。例如,您可以这样做:
from django.shortcuts import get_object_or_404
class HomePage(TemplateView):
template_name = 'index.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['video'] = get_object_or_404(Video, slug='name-of-title')
return context
然后在index.html中,您可以执行<a href="{% url 'video_detail' video.slug %}">
。
或者,您可以将所有个视频添加到模板上下文中。
class HomePage(TemplateView):
template_name = 'index.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['videos'] = Video.objects.all()
return context
然后,您可以循环浏览模板中的视频。
{% for video in videos %}
<a href="{% url 'video_detail' video.slug %}">{{ video.title }}</a>
{% endfor %}