Проблема с обратным URL-адресом: URL-адрес шаблона выдает обратную ошибку - PullRequest
0 голосов
/ 21 июня 2020

Я получаю эту ошибку Обратный для '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 индекс рендеринга. html

class HomePage(TemplateView):
template_name = 'index.html'

Ответы [ 2 ]

0 голосов
/ 22 июня 2020

Вы поместили ссылку в свой шаблон индекса <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

Затем вы можете oop просматривать видео в вашем шаблоне.

{% for video in videos %}
<a href="{% url 'video_detail' video.slug %}">{{ video.title }}</a>
{% endfor %}
0 голосов
/ 21 июня 2020

используйте -

<a href="{% url 'video_detail' slug=video.slug  %}">

убедитесь, что video является объектом модели, в котором вы его используете, иначе он ничего не даст, и вы получите ошибку URL-адреса.

...